| 1 | module WrapIOMonad ( WrapIO, WrapIO2 ) |
|---|
| 2 | where |
|---|
| 3 | |
|---|
| 4 | newtype WrapIO e a = |
|---|
| 5 | MkWrapIO { unwrap :: IO a } |
|---|
| 6 | |
|---|
| 7 | type WrapIO2 a = WrapIO String a |
|---|
| 8 | |
|---|
| 9 | instance Monad (WrapIO e) where |
|---|
| 10 | return x = MkWrapIO (return x) |
|---|
| 11 | |
|---|
| 12 | m >>= f = MkWrapIO (do x <- unwrap m |
|---|
| 13 | unwrap (f x) ) |
|---|
| 14 | |
|---|
| 15 | fail str = error str |
|---|