[Yhc] coreFunc has extra argument

Thomas Shackell shackell at cs.york.ac.uk
Tue Mar 4 07:09:27 EST 2008


> I believe
> 'tackling the awkward squad' explains the World parameter.
> 
> http://research.microsoft.com/~simonpj/papers/marktoberdorf/

Indeed this is the 'World' parameter. It's quite easy to see why it's 
needed. Image the getChar function ...

getChar :: IO Char

if we imagine that the World parameter wasn't present, this would make 
the type of getChar.

getChar :: _E Char

Since _E is just a box this is basically the same as.

getChar :: Char

Since this doesn't take any arguments it's a CAF, i.e. a constant value. 
Since it's constant, every call to getChar would always return the same 
character!

When we add the World parameter we turn getChar into.

getChar :: World -> Char

Now getChar takes an argument, so its value is no longer constant (its 
value can vary depending on the argument). Haskell neither knows, nor 
cares, that getChar doesn't even look at the World argument. As far as 
Haskell is concerned getChar has an argument so Haskell can't treat it 
like a constant.

In other words, it's all some nasty trickery to make impure functions 
work correctly in Haskell ;)

Hope that explains it :)


Tom





More information about the Yhc mailing list