view prepaper/src/delta_instance_monad.hs @ 72:109c5bc7e276

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 17 Feb 2015 16:40:06 +0900
parents c75ba6313e39
children
line wrap: on
line source

headDelta :: Delta a -> a
headDelta (Mono  x)   = x
headDelta (Delta x _) = x

tailDelta :: Delta a -> Delta a
tailDelta (Mono x)     = Mono x
tailDelta (Delta _ ds) = ds

instance Monad Delta where
 return x = Mono x
 (Mono x) >>= f    = f x
 (Delta x d) >>= f = Delta (headDelta (f x))
                       (d >>= (tailDelta . f))