Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
{-# LANGUAGE RankNTypes #-}
type Lens t i = Functor f => (i -> f i) -> t -> f t
data Person = Person { _name :: String, _age :: Int } deriving Show
nameLens :: Lens Person String
nameLens f (Person name age) = fmap (\newName -> Person newName age) (f name)
ageLens :: Lens Person Int
ageLens f (Person name age) = fmap (\newAge -> Person name newAge) (f age)
set :: Lens t i -> t -> i -> t
set l x v = l (flip const) x v
get :: Lens t i -> t -> i
get l x = val
where (Left val) = l Left x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.