{-# LANGUAGE TypeOperators #-} module Data.Record.Label.Prelude where import Data.Record.Label -- First class labels pre-defined for the standard types from haskell's prelude -- | [a] lHead :: [a] :-> a lHead = lens head (:) lTail :: [a] :-> [a] lTail = lens tail (\t-> (:t) . head) -- | (a,b) lFst :: (a,b) :-> a lFst = lens fst (\a (_,b)-> (a,b)) lSnd :: (a,b) :-> b lSnd = lens snd (\b (a,_)-> (a,b))