On Jul 16, 2009, at 10:18 AM, Bas van Dijk wrote:
I see you define ListT as a datatype:
http://hackage.haskell.org/packages/archive/generator/0.5.1/doc/html/src/Con...
Can't you better define it as a newtype I should had done that, and next released version will fix it.
BTW, note that your ListT is also similar to my StreamT: http://code.haskell.org/~basvandijk/code/stream/Control/Monad/StreamT.hs (not on Hackage)
It seems like StreamT is an infinite-list version of ListT. another difference is that StreamT redefines scanl, transpose, etc and for ListT I created a List class (for which regular lists are an instance) for which the standard list functions are defined: filter, takeWhile, everything which keeps items in the list for functions which don't keep the item in the list I define similar functions (because the result is in the item monad the type is different) so you can do import Data.List.Class (takeWhile) import Prelude hiding (takeWhile) and still use takeWhile for lists (except maybe mine isn't as efficient as Data.List's and maybe doesn't bring its useful rewrite rules to play) thanks to SequenceT I also found http://www.haskell.org/haskellwiki/ListT_done_right which at its core is just like my ListT