Session 1, 2004
The following exercises are based on the operational semantics for
IO
operations defined in Simon Peyton Jones' Tackling
the Awkward Squad.
Assume the following program in do
notation:
main = do c1 <- getChar c2 <- getChar putChar (Char.chr (Char.ord c1 + Char.ord c2))
It can be rewritten to use the monad primitives instead of the
do
notation as follows:
main = getChar >>= \c1 -> getChar >>= \c2 -> putChar (Char.chr (Char.ord c1 + Char.ord c2))
Use the transition semantics in the same way as it is done on
Page 27 of Peyton Jones' paper to execute this program (ignore
the use of IORef
s in that example for the moment).
Note the interaction between the evaluation function and the
transition rules.
NB: Assume that the addition of two numbers "x" and "y" gives a result of "x + y", where the "+" here is not the addition in the object language (ie, Haskell), but in the mathematical meta language in which we reason about object language programs.
[an error occurred while processing this directive]