How can I make a counter without Monad?
Tomasz Zielonka
tomasz.zielonka at gmail.com
Wed Mar 16 01:57:13 EST 2005
On Wed, Mar 16, 2005 at 01:17:51AM +0100, Nicolas Oury wrote:
> Greetings,
>
> In a program, I want to give a unique name to some structures.
>
> As it is the only imperative thing I need, I don't want to use a monad.
You don't want to use the IO monad. Why not use some other monad?
> I have played with two solutions and have some questions :
>
> * unsafePerformIO :
This is asking for trouble. You are using an IO monad in an unsafe way.
Don't do it.
> * linear implicit parameters
>
> [...]
>
> Are there other ways to implement a counter in Haskell?
Using a State monad?
>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
where
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
class)
Best regards
Tomasz
More information about the Glasgow-haskell-users
mailing list