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

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -