Purity of the stack execution model? (fwd)
Koen Claessen
koen@cs.chalmers.se
Thu, 15 Feb 2001 10:20:07 +0100 (MET)
Hi!
Somebody posted the following message on
comp.lang.functional. It reports an error when having a main
function which has type "IO [()]", together with using
runhugs.
This is a bug; the Haskell report says that main "must be a
computation of type IO t for some type t".
/Koen.
---------- Forwarded message ----------
Date: Wed, 14 Feb 2001 23:23:50 +0100
From: Tore Lund <tl001@online.no>
Newsgroups: comp.lang.functional
Subject: Re: Purity of the stack execution model?
Markus Mottl wrote:
>
> actions = [putStr "foo", putStr "bar"]
> nl = putStr "\n"
> main = sequence actions >> nl >> mapM (>> nl) (reverse actions)
Maybe some kindly soul could tell me what is the type of main here.
Running the right-hand clause within a "do" construct works fine.
However, if I try the following:
module Main where
actions = [putStr "foo", putStr "bar"]
nl = putStr "\n"
main = sequence actions >> nl >> mapM (>> nl) (reverse actions)
I get this message from runhugs:
Program error: fromDyn failed. Expecting <<IO() >> found <<IO[
Program error: {instShow_v1536_v1601 [instTypeable_v1537 (head
(unsafePerformIO main))]}runhugs: Error occurred
Trying to equip main with various IO types just leads to more errors.
What am I missing please?
*
Moreover, this is admittedly a powerful example of what can be done with
Haskell and monads. Is it possible to write such a program with
comparable ease in, say, SML or OCaml?
--
Tore