summaryrefslogtreecommitdiff
path: root/lc/Internals.lc
diff options
context:
space:
mode:
Diffstat (limited to 'lc/Internals.lc')
-rw-r--r--lc/Internals.lc62
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
3module Internals where
4
5undefined :: forall (a :: Type) . a
6
7data Unit = TT
8data String
9data Empty (a :: String)
10
11-- TODO: generate?
12data Tuple0 = Tuple0
13data Tuple1 a = Tuple1 a
14data Tuple2 a b = Tuple2 a b
15data Tuple3 a b c = Tuple3 a b c
16data Tuple4 a b c d = Tuple4 a b c d
17data Tuple5 a b c d e = Tuple5 a b c d e
18
19
20-- ... TODO
21
22-- builtin used for overlapping instances
23parEval :: forall a -> a -> a -> a
24
25type family EqC a b -- equality constraints
26type family T2 a b -- conjuction of constraints
27
28-- builtin conjuction of constraint witnesses
29t2C :: Unit -> Unit -> Unit
30
31-- builtin type constructors
32data Int
33data Word
34data Float
35data Char
36
37data Bool = False | True
38
39data Ordering = LT | EQ | GT
40
41-- builtin primitives
42primIntToWord :: Int -> Word
43primIntToFloat :: Int -> Float
44primCompareInt :: Int -> Int -> Ordering
45primCompareWord :: Word -> Word -> Ordering
46primCompareFloat :: Float -> Float -> Ordering
47primCompareString :: String -> String -> Ordering
48primNegateInt :: Int -> Int
49primNegateWord :: Word -> Word
50primNegateFloat :: Float -> Float
51primAddInt :: Int -> Int -> Int
52primSubInt :: Int -> Int -> Int
53primModInt :: Int -> Int -> Int
54primSqrtFloat :: Float -> Float
55primRound :: Float -> Int
56
57
58primIfThenElse :: Bool -> a -> a -> a
59primIfThenElse True a b = a
60primIfThenElse False a b = b
61
62