Newbie qustion about monads

Marcin 'Qrczak' Kowalczyk qrczak at knm.org.pl
Thu Oct 2 15:27:29 EDT 2003


W liście z czw, 02-10-2003, godz. 12:59, Juanma Barranquero pisze:

> It's not about counting the operations (that's just an example), but
> accumulating any kind of state. For example:
> 
>   data Accum a = Ac [a] a
> 
>   instance Monad Accum where
>       return x     = Ac [x] x
>       Ac _ x >>= f = let Ac l x' = f x in Ac (l ++ [x']) x'

Accumulating state is fine. These definitions don't accumulate state:
'return' should yield a "neutral" state, and the above ">>=" ignores the
state of the lhs.

The type of Accum makes little sense. Each atomic operation can have
a different result type, so in order to accumulate something the state
can't depend on the type of the result.

data Accum s a = Ac [s] a

instance Monad (Accum s) where
   return x      = Ac [] x
   Ac s1 x >>= f = let Ac s2 y = f x in Ac (s1++s2) y

output :: a -> Accum a ()
output x = Ac [x] ()

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak at knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/



More information about the Haskell-Cafe mailing list