     })
 }
 
+struct Node {
+    var children: [Node]
+
+    init(children: [Node]) {
+        self.children = children
+    }
+}
+
+struct NodeLenses {
+    static let children = Lens<Node, [Node]>(get: { $0.children }, set: { (inout node: Node, children) in
+        node.children = children
+    })
+}
+
 struct Adapters {
     static let inner = DictionaryAdapter(specification: [
         "count": transform(InnerLenses.count, ValueTransformers.int)

                let result = adapter.decode(Inner(count: 2), from: [ "count": 3 ])

                expect(result.value?.count).to(equal(3))
            }
        }


        "count": transform(OuterLenses.count, ValueTransformers.int),
        "inner": transform(OuterLenses.inner, lift(inner, Inner(count: 0)))
    ], dictionaryTansformer: ValueTransformers.dictionary)

    static let node: DictionaryAdapter<Node, AnyObject, NSError> = fix { adapter in
        return DictionaryAdapter(specification: [
            "children": transform(NodeLenses.children, lift(lift(adapter, Node(children: []))) >>> ValueTransformers.array)
        ], dictionaryTansformer: ValueTransformers.dictionary)
    }
}

class AdapterSpec: QuickSpec {
