diff options
Diffstat (limited to 'lc/Internals.lc')
-rw-r--r-- | lc/Internals.lc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lc/Internals.lc b/lc/Internals.lc new file mode 100644 index 00000000..b64d5a41 --- /dev/null +++ b/lc/Internals.lc | |||
@@ -0,0 +1,62 @@ | |||
1 | {-# LANGUAGE NoImplicitPrelude #-} | ||
2 | -- declarations of builtin functions and data types used by the compiler | ||
3 | module Internals where | ||
4 | |||
5 | undefined :: forall (a :: Type) . a | ||
6 | |||
7 | data Unit = TT | ||
8 | data String | ||
9 | data Empty (a :: String) | ||
10 | |||
11 | -- TODO: generate? | ||
12 | data Tuple0 = Tuple0 | ||
13 | data Tuple1 a = Tuple1 a | ||
14 | data Tuple2 a b = Tuple2 a b | ||
15 | data Tuple3 a b c = Tuple3 a b c | ||
16 | data Tuple4 a b c d = Tuple4 a b c d | ||
17 | data Tuple5 a b c d e = Tuple5 a b c d e | ||
18 | |||
19 | |||
20 | -- ... TODO | ||
21 | |||
22 | -- builtin used for overlapping instances | ||
23 | parEval :: forall a -> a -> a -> a | ||
24 | |||
25 | type family EqC a b -- equality constraints | ||
26 | type family T2 a b -- conjuction of constraints | ||
27 | |||
28 | -- builtin conjuction of constraint witnesses | ||
29 | t2C :: Unit -> Unit -> Unit | ||
30 | |||
31 | -- builtin type constructors | ||
32 | data Int | ||
33 | data Word | ||
34 | data Float | ||
35 | data Char | ||
36 | |||
37 | data Bool = False | True | ||
38 | |||
39 | data Ordering = LT | EQ | GT | ||
40 | |||
41 | -- builtin primitives | ||
42 | primIntToWord :: Int -> Word | ||
43 | primIntToFloat :: Int -> Float | ||
44 | primCompareInt :: Int -> Int -> Ordering | ||
45 | primCompareWord :: Word -> Word -> Ordering | ||
46 | primCompareFloat :: Float -> Float -> Ordering | ||
47 | primCompareString :: String -> String -> Ordering | ||
48 | primNegateInt :: Int -> Int | ||
49 | primNegateWord :: Word -> Word | ||
50 | primNegateFloat :: Float -> Float | ||
51 | primAddInt :: Int -> Int -> Int | ||
52 | primSubInt :: Int -> Int -> Int | ||
53 | primModInt :: Int -> Int -> Int | ||
54 | primSqrtFloat :: Float -> Float | ||
55 | primRound :: Float -> Int | ||
56 | |||
57 | |||
58 | primIfThenElse :: Bool -> a -> a -> a | ||
59 | primIfThenElse True a b = a | ||
60 | primIfThenElse False a b = b | ||
61 | |||
62 | |||