[missing documentation ekmett@gmail.com**20090412100151 Ignore-this: 72dad1cc5a3632b703f1cb0830c777ae ] { addfile ./doc/html/monad-cps/Control-Monad-CPS-Maybe.html hunk ./doc/html/monad-cps/Control-Monad-CPS-Maybe.html 1 + + +Control.Monad.CPS.Maybe
 monad-cps-0.0.3: CPS implementations of common monads.Source codeContentsIndex
Control.Monad.CPS.Maybe
Documentation
newtype Maybe' a Source
Constructors
Maybe'
getMaybe' :: forall o. (a -> o) -> o -> o
show/hide Instances
runMaybe' :: Maybe' a -> (a -> b) -> b -> bSource
Produced by Haddock version 2.3.0
addfile ./doc/html/monad-cps/src/Control-Monad-CPS-Maybe.html hunk ./doc/html/monad-cps/src/Control-Monad-CPS-Maybe.html 1 + + + + +src/Control/Monad/CPS/Maybe.hs + + + +
module Control.Monad.CPS.Maybe
+    ( Maybe'(Maybe',getMaybe')
+    , runMaybe'
+    ) where
+
+import Control.Applicative
+import Control.Monad
+
+newtype Maybe' a = Maybe' { getMaybe' :: forall o. (a -> o) -> o -> o } 
+
+runMaybe' :: Maybe' a -> (a -> b) -> b -> b
+runMaybe' = getMaybe'
+
+instance Functor Maybe' where
+    fmap f (Maybe' g) = Maybe' (\k -> g (k . f))
+
+instance Applicative Maybe' where
+    pure = return
+    (<*>) = ap
+
+instance Monad Maybe' where
+    return a = Maybe' (\k _ -> k a)
+    Maybe' f >>= g = Maybe' (\k z -> f (\a -> getMaybe' (g a) k z) z)
+
+-- TODO: Ran Identity Endo, a right Kan extension/Yoneda lemma of a non-Hask Functor!
+
+ }