Skip to content

Instantly share code, notes, and snippets.

@tonymorris
Created March 28, 2014 23:54
Show Gist options
  • Save tonymorris/9845452 to your computer and use it in GitHub Desktop.
Save tonymorris/9845452 to your computer and use it in GitHub Desktop.
Lens traversals
import Control.Lens
import Control.Applicative
data T a =
T (Maybe a)
deriving (Eq, Show)
traverseT ::
Traversal' (T a) a
traverseT _ (T Nothing) =
pure (T Nothing)
traverseT f (T (Just a)) =
T . Just <$> f a
-- \f (T a) -> T <$> traverse f a
data U a =
U (Maybe a) [a] Int
deriving (Eq, Show)
traverseU ::
Traversal' (U a) a
traverseU f (U a as i) =
U <$> traverse f a <*> traverse f as <*> pure i
data V a =
V Int a
deriving (Eq, Show)
traverseV ::
Traversal' (V a) Int
traverseV f (V n a) =
V <$> f n <*> pure a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment