# Help with "20 intermediate haskell exercises"

7 messages
Open this post in threaded view
|

## Help with "20 intermediate haskell exercises"

 Hi, I'm running through these Haskell exercises:   http://dibblego.wordpress.com/2008/09/18/20-intermediate-haskell-exercises/and I'm stuck at number 9: class Misty m where   banana :: (a -> m b) -> m a -> m b   unicorn :: a -> m a -- Exercise 9 -- Relative Difficulty: 6 instance Misty ((->) t) where   banana = ???   unicorn x = (\t -> x) I can picture it when m is "[]" or "Maybe", but I can't wrap my head around the banane implementation for "((->) t)". I can see that this somewhat looks like a Monad, with unicorn = return and banana = (flip >>=) or something. Perhaps some kind of reader Monad? Can anyone offer any insight? Patrick -- ===================== Patrick LeBoutillier Rosem?re, Qu?bec, Canada
Open this post in threaded view
|

## Help with "20 intermediate haskell exercises"

 On Fri, Jul 03, 2009 at 11:58:22AM -0400, Patrick LeBoutillier wrote: > Hi, > > I'm running through these Haskell exercises: > >   http://dibblego.wordpress.com/2008/09/18/20-intermediate-haskell-exercises/> > and I'm stuck at number 9: > > > class Misty m where >   banana :: (a -> m b) -> m a -> m b >   unicorn :: a -> m a > > -- Exercise 9 > -- Relative Difficulty: 6 > instance Misty ((->) t) where >   banana = ??? >   unicorn x = (\t -> x) > > > I can picture it when m is "[]" or "Maybe", but I can't wrap my head > around the banane implementation for "((->) t)". > I can see that this somewhat looks like a Monad, with unicorn = return > and banana = (flip >>=) or something. Perhaps some kind of reader > Monad? Precisely. ((->) t) is the reader monad. Just follow the types!   banana :: (a -> m b) -> m a -> m b substituting ((->) t) for m (remembering that (->) associates to the right):   banana :: (a -> t -> b) -> (t -> a) -> t -> b   banana f g t = ? Can you figure out how to apply f :: (a -> t -> b) and g :: (t -> a) to a 't' in order to get a 'b'? -Brent
Open this post in threaded view
|

## Help with "20 intermediate haskell exercises"

 In reply to this post by Patrick LeBoutillier Am Freitag 03 Juli 2009 17:58:22 schrieb Patrick LeBoutillier: > Hi, > > I'm running through these Haskell exercises: > >   > http://dibblego.wordpress.com/2008/09/18/20-intermediate-haskell-exercises/> > and I'm stuck at number 9: > > > class Misty m where >   banana :: (a -> m b) -> m a -> m b >   unicorn :: a -> m a > > -- Exercise 9 > -- Relative Difficulty: 6 > instance Misty ((->) t) where >   banana = ??? >   unicorn x = (\t -> x) > > > I can picture it when m is "[]" or "Maybe", but I can't wrap my head > around the banane implementation for "((->) t)". > I can see that this somewhat looks like a Monad, with unicorn = return > and banana = (flip >>=) or something. Perhaps some kind of reader > Monad? Exactly. You want banana :: (a -> (t -> b)) -> (t -> a) -> (t -> b) banana fun af = \tval -> ??? There's not much choice what you can do with those types and data. > Can anyone offer any insight? > > > Patrick
Open this post in threaded view
|

## Help with "20 intermediate haskell exercises"

 Hi, Thanks for the help. I figured it out after that. I'm having a hard time with the other exercises though, I'm currently stuck at 14: class Misty m where   banana :: (a -> m b) -> m a -> m b   unicorn :: a -> m a -- Exercise 14 -- Relative Difficulty: 6 moppy :: (Misty m) => [a] -> (a -> m b) -> m [b] moppy = error "todo" Does anyone know if the solutions are posted anywhere? Patrick On Fri, Jul 3, 2009 at 12:08 PM, Daniel Fischer<[hidden email]> wrote: > Am Freitag 03 Juli 2009 17:58:22 schrieb Patrick LeBoutillier: >> Hi, >> >> I'm running through these Haskell exercises: >> >> >> http://dibblego.wordpress.com/2008/09/18/20-intermediate-haskell-exercises/>> >> and I'm stuck at number 9: >> >> >> class Misty m where >> ? banana :: (a -> m b) -> m a -> m b >> ? unicorn :: a -> m a >> >> -- Exercise 9 >> -- Relative Difficulty: 6 >> instance Misty ((->) t) where >> ? banana = ??? >> ? unicorn x = (\t -> x) >> >> >> I can picture it when m is "[]" or "Maybe", but I can't wrap my head >> around the banane implementation for "((->) t)". >> I can see that this somewhat looks like a Monad, with unicorn = return >> and banana = (flip >>=) or something. Perhaps some kind of reader >> Monad? > > Exactly. > > You want > > banana :: (a -> (t -> b)) -> (t -> a) -> (t -> b) > banana fun af = \tval -> ??? > > There's not much choice what you can do with those types and data. > >> Can anyone offer any insight? >> >> >> Patrick > > _______________________________________________ > Beginners mailing list > [hidden email] > http://www.haskell.org/mailman/listinfo/beginners> -- ===================== Patrick LeBoutillier Rosem?re, Qu?bec, Canada
Open this post in threaded view
|

## Help with "20 intermediate haskell exercises"

 Am Sonntag 05 Juli 2009 21:05:20 schrieb Patrick LeBoutillier: > Hi, > > Thanks for the help. I figured it out after that. I'm having a hard > time with the other exercises though, I'm currently stuck at 14: > > > class Misty m where >   banana :: (a -> m b) -> m a -> m b >   unicorn :: a -> m a > > -- Exercise 14 > -- Relative Difficulty: 6 > moppy :: (Misty m) => [a] -> (a -> m b) -> m [b] > moppy = error "todo" moppy [] mop = ? moppy (a:as) mop = (mop a) ?? (moppy as mop) use (among other things) banana and unicorn to replace the question marks > > > Does anyone know if the solutions are posted anywhere? They're (under different names) in the standard libraries :) > > > Patrick