
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@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/