--- /dev/null
+/// Lens ///
+
+"""
+Laws:
+ set l (get l a) a) = a
+ get l (set l b a) = b
+ set l c (set l b a) = set l c a
+"""
+data Lens a b = Lens (a -> b) (b -> a -> a)
+
+get :: Lens a b -> a -> b
+get (Lens f _) = f
+
+set :: Lens a b -> b -> a -> a
+set (Lens _ g) = g
+
+/*instance Category Lens where
+ id = Lens id const
+ f . g = Lens (get f . get g)
+ (\x y -> set g (set f x (get g y)) y)
+*/