+++ /dev/null
--- !! INLINE on recursive functions.
-{-
-Date: Thu, 8 Dec 94 11:38:24 GMT
-From: Julian Seward (DRL PhD) <sewardj@computer-science.manchester.ac.uk>
-Message-Id: <9412081138.AA16652@rdf009.cs.man.ac.uk>
-To: partain@dcs.gla.ac.uk
--}
-module ShouldCompile where
-
-type IMonad a
- = IMonadState -> IMonadReturn a
-
-data IMonadReturn a
- = IMonadOk IMonadState a
- | IMonadFail IMonadState String
-
-type IMonadState
- = Int
-
-
-returnI r = \s0 -> IMonadOk s0 r
-
-failI msg = \s0 -> IMonadFail s0 msg
-
-thenI m k
- = \s0 -> case m s0 of
- IMonadFail s1 msg -> IMonadFail s1 msg
- IMonadOk s1 r1 -> k r1 s1
-
-tickI n = \s0 -> IMonadOk (s0+n) ()
-
-mapI f [] = returnI []
-mapI f (x:xs) = f x `thenI` ( \ fx ->
- mapI f xs `thenI` ( \ fxs ->
- returnI (fx:fxs)
- ))
-
-{-# INLINE returnI #-}
-{-# INLINE failI #-}
-{-# INLINE thenI #-}
-{-# INLINE tickI #-}
-{-# INLINE mapI #-}