[project @ 1999-06-09 09:35:54 by simonpj]
[ghc-hetmet.git] / ghc / tests / programs / jeff-bug / PreludeSig.hs
1 module PreludeSig where
2
3 import Prelude(Ord,Bool,Int,($),(.))
4 import qualified Prelude as P
5 import qualified List
6 import Monad
7 import Signal
8
9 -- Begin Signature ----------------------------------------------------
10 {- 
11    Functions in this module are functions from the Haskell
12    prelude lifted on Signals
13 -}
14
15 last ::  Signal [a] -> Signal a
16 head :: Signal [a] -> Signal a
17 tail :: Signal [a] -> Signal [a]
18 splitAt :: Signal Int -> Signal [a] -> (Signal [a], Signal [a])
19 length :: Signal [a] -> Signal Int
20 max :: Ord a => Signal a -> Signal a -> Signal a
21 min :: Ord a => Signal a -> Signal a -> Signal a
22 maximum :: Ord a => Signal [a] -> Signal a
23 minimum :: Ord a => Signal [a] -> Signal a
24 filter :: MonadPlus c => (a -> Bool) -> Signal (c a) -> Signal (c a)
25 partition :: (a -> Bool) -> Signal [a] -> (Signal [a],Signal [a])
26 fst :: Signal (a,b) -> Signal a
27 snd :: Signal (a,b) -> Signal b
28
29 -- End Signature -----------------------------------------------------
30 last = lift1 P.last
31
32 head = lift1 P.head
33
34 tail = lift1 P.tail
35
36 splitAt x y = unbundle2 $ lift2 P.splitAt x y
37
38 length = lift1 P.length
39
40 max = lift2 P.max
41
42 min = lift2 P.min
43
44 maximum = lift1 P.maximum
45
46 minimum = lift1 P.minimum
47
48 filter p y = lift1 filt y
49            where
50              filt m = do { x <- m;
51                            if p x then mzero else return x }
52
53 partition x y = unbundle2 (lift1 (List.partition x) y )
54
55 fst = lift1 P.fst
56
57 snd = lift1 P.snd
58
59 -- Begin Signature ----------------------------------------------------