> If it is only for knowing where things went wrong, ...Thanks Olaf, no I think Ducis wants to stack the whole history of the computation.> If ... Then you need to stack a state transformer on top,Yes a monad transformer might be it. Thank you for the example.As per my previous message, I'm not convinced it needs monads at all. Here's a dumb approach as a straw man, showing that type-changing steps are nothing special (or perhaps I mean type-preserving steps are nothing special ;-). Ducis could explain why this won't donil = ()
cons x l = (x, l)
start :: a -> (a,())
start x = cons x nil -- i.e. singleton x
infixl 0 $>>
($>>) :: (b, _a) -> (b -> c) -> (c, (b, _a))
xs@(x, z) $>> f = cons (f x) xs
eg = start 1 $>> (+ 1) $>> (+ 3) $>> double $>> show
===> ("10",(10,(5,(2,(1,())))))
I chose ($>>) to be similar to ($>) from the Control.FPipe package "trivial F#-style pipes for function composition and application".
You could use Datakind `'[]` instead of the 'poor man's heterogeneous list' I've used, but that seems over-engineering.
AntC