eaa3703b6c05384682d2cf3ee476705bc3f07d50
[clean-tests.git] / datatype / Language.hs
1 {-# LANGUAGE MultiParamTypeClasses #-}
2 module Language where
3
4 import Serialise
5
6 newtype Main a = Main {unmain :: a}
7 data In a b = a :- b
8 infix 1 :-
9
10 class Expression v where
11 lit :: (Serialise a, Show a) => a -> v a
12 (+.) :: Num a => v a -> v a -> v a
13 (-.) :: Num a => v a -> v a -> v a
14 (/.) :: Fractional a => v a -> v a -> v a
15 (*.) :: Num a => v a -> v a -> v a
16 (^.) :: Integral a => v a -> v a -> v a
17 neg :: Num a => v a -> v a
18 (&.) :: v Bool -> v Bool -> v Bool
19 (|.) :: v Bool -> v Bool -> v Bool
20 not :: v Bool -> v Bool
21 (==.) :: Eq a => v a -> v a -> v Bool
22 (/=.) :: Eq a => v a -> v a -> v Bool
23 (<.) :: Ord a => v a -> v a -> v Bool
24 (>.) :: Ord a => v a -> v a -> v Bool
25 (<=.) :: Ord a => v a -> v a -> v Bool
26 (>=.) :: Ord a => v a -> v a -> v Bool
27 if' :: v Bool -> v a -> v a -> v a
28 bottom :: String -> v a
29
30 class Function a v where
31 fun :: ( (a -> v s) -> In (a -> v s) (Main (v u)) ) -> Main (v u)
32
33 infixr 2 |.
34 infixr 3 &.
35 infix 4 ==., /=., <., >., <=., >=.
36 infixl 6 +., -.
37 infixl 7 *., /.
38 infixl 8 ^.