How can I make a counter without Monad?
Nicolas.Oury at lri.fr
Wed Mar 16 04:51:08 EST 2005
Thanks for your help.
>> Are there other ways to implement a counter in Haskell?
> Using a State monad?
If I use your example on :
test = let Node x l = enumeratedTree ( Node 'a' [undefined, Node 'b'
in tail l
[Node (*** Exception: Prelude.undefined
A monadic counter imposes an order of evaluation.
In my program, I don't care about the order of the numbers.
I only want them to be all different.
I think a monad is too restrictive for what I need.
>> From some of my code:
> let enumeratedTree =
> (`evalState` (0::Int)) $ (`mapTreeM` t) $
> \x -> do n <- next
> return (n, x)
> next = do a <- get; put $! succ a; return a
> mapTreeM :: Monad m => (a -> m b) -> Tree a -> m (Tree b)
> mapTreeM f (Node a ts) = do
> b <- f a
> ts' <- mapM (mapTreeM f) ts
> return (Node b ts')
> (which could also be an instance of a popular non-standard FunctorM
> Best regards
More information about the Glasgow-haskell-users