<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:large">i'm trying this example (see code below) from :</div><div class="gmail_default" style="font-size:large"><a href="http://learnyouahaskell.com/for-a-few-monads-more#making-monads">http://learnyouahaskell.com/for-a-few-monads-more#making-monads</a></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">when trying to compile this:</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">import Data.Ratio<br><br>newtype Prob a = Prob { getProb :: [(a,Rational)] } deriving Show<br><br><br>instance Functor Prob where<br>    fmap f (Prob xs) = Prob $ map (\(x,p) -> (f x,p)) xs<br><br>    <br>thisSituation :: Prob (Prob Char)<br>thisSituation = Prob<br>    [( Prob [('a',1%2),('b',1%2)] , 1%4 )<br>    ,( Prob [('c',1%2),('d',1%2)] , 3%4)<br>    ]<br><br>flatten :: Prob (Prob a) -> Prob a<br>flatten (Prob xs) = Prob $ concat $ map multAll xs<br>    where multAll (Prob innerxs,p) = map (\(x,r) -> (x,p*r)) innerxs   <br><br><br>instance Monad Prob where<br>  return x = Prob [(x,1%1)]<br>  m >>= f = flatten (fmap f m)<br>  fail _ = Prob []<br><br><br><br>l1 = Prob [('a',2%3),('b',1%3)]<br><br>multAllExt :: (Prob a, Rational) -> [(a, Rational)]<br>multAllExt (Prob innerxs,p) = map (\(x,r) -> (x,p*r)) innerxs<br><br>--Main> :type multAllExt<br>--multAllExt :: (Prob a, Rational) -> [(a, Rational)]<br><br><br>--Main> multAllExt (l1,1 % 4)<br>--[('a',1 % 6),('b',1 % 12)]</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">i get this error:</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">GHCi, version 8.4.3: <a href="http://www.haskell.org/ghc/">http://www.haskell.org/ghc/</a>  :? for help<br>Prelude> :load monade.hs<br>[1 of 1] Compiling Main             ( monade.hs, interpreted )<br><br>monade.hs:21:10: error:<br>    • No instance for (Applicative Prob)<br>        arising from the superclasses of an instance declaration<br>    • In the instance declaration for ‘Monad Prob’<br>   |<br>21 | instance Monad Prob where<br>   |          ^^^^^^^^^^<br>Failed, no modules loaded.<br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">it fails when i add the last part of the example:</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">instance Monad Prob where<br>  return x = Prob [(x,1%1)]<br>  m >>= f = flatten (fmap f m)<br>  fail _ = Prob []</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">seems the Monad needs an instance of the Applicative to be instanciated...</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">what is wrong? <br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">regards,</div><div class="gmail_default" style="font-size:large">Damien<br></div></div></div></div></div>