haskell - In the lets-lens tutorial, how do you refactor out the call to traverse in order to implement over? -
in the exercises have implemented fmapt:
-- let's remind ourselves of traversable, noting foldable , functor. -- -- class (foldable t, functor t) => traversable t --   traverse :: --     applicative f =>  --     (a -> f b) --     -> t --     -> f (t b)  -- | observe @fmap@ can recovered @traverse@ using @identity@. -- -- /reminder:/ fmap :: functor t => (a -> b) -> t -> t b fmapt ::   traversable t =>   (a -> b)   -> t   -> t b fmapt =   error "todo: fmapt" now how implement over?
-- | let's refactor out call @traverse@ argument @fmapt@.  on ::   ((a -> identity b) -> s -> identity t)   -> (a -> b)   -> s   -> t on = error "undefined" 
you can implement fmapt using traverse as:
fmapt f s = runidentity (traverse (identity . f) s) now next exercise refactor function providing traverse parameter rather hard-coding in definition. if choose identity applicative type constructor type of traverse is:
(traversable t) => (a -> identity b) -> t -> identity (t b) if provide parameter fmapt end over:
over' :: traversable t => ((a -> identity b) -> t -> identity (t b)) -> (a -> b) -> t -> t b over' l f s = runidentity (l (identity . f) s) since traversable constraint exists in traverse not required over' has more general type of over given in exercise i.e.
over :: ((a -> identity b) -> (s -> identity t)) -> (a -> b) -> s -> t and
over' =  on traverse 
Comments
Post a Comment