[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / tests / typecheck / should_fail / tcfail066.hs
1 --!! INLINE on recursive functions.
2 {-
3 Date: Thu, 8 Dec 94 11:38:24 GMT
4 From: Julian Seward (DRL PhD) <sewardj@computer-science.manchester.ac.uk>
5 Message-Id: <9412081138.AA16652@rdf009.cs.man.ac.uk>
6 To: partain@dcs.gla.ac.uk
7 -}
8
9 type IMonad a
10    = IMonadState -> IMonadReturn a
11
12 data IMonadReturn a
13    = IMonadOk   IMonadState a
14    | IMonadFail IMonadState String
15
16 type IMonadState
17    = Int
18
19
20 returnI r = \s0 -> IMonadOk   s0 r
21
22 failI msg = \s0 -> IMonadFail s0 msg
23
24 thenI m k
25    = \s0 -> case m s0 of
26                IMonadFail s1 msg -> IMonadFail s1 msg
27                IMonadOk s1 r1    -> k r1 s1
28    
29 tickI n = \s0 -> IMonadOk (s0+n) ()
30
31 mapI f [] = returnI []
32 mapI f (x:xs) = f x           `thenI` ( \ fx ->
33                 mapI f xs     `thenI` ( \ fxs ->
34                 returnI (fx:fxs)
35                 ))
36
37 {-# INLINE returnI #-}
38 {-# INLINE failI #-}
39 {-# INLINE thenI #-}
40 {-# INLINE tickI #-}
41 {-# INLINE mapI #-}