
8 Aug
2013
8 Aug
'13
12:44 p.m.
On Thu, Aug 08, 2013 at 06:25:12PM +0200, Daniel Trstenjak wrote:
See [1] for an explanation of free monads in general. For IO in particular, define a functor
data IOF a = GetChar (Char -> a) | PutChar Char a | ...
with constructors for all elementary IO operations.
But how should this work if the user adds an IO operation, e.g by wrapping a C function?
Wrapping a C function could perhaps be provided by something like data IOF a = ... | forall i o. Foreign String i (o -> a) | ... csin :: Double -> IO Double csin x = liftF (Foreign "math.h sin" x id) Tom