ref: d0fd36970770fcc04cdafb9c396dca39637ce93d
parent: 89e717504a78dfde4a61044aa6f04815d2b91cfc
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Mon Sep 18 06:36:08 EDT 2023
Move definition of () to Primitives
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
v3.3
821
-(($A :0 ((_623 _576) (($B ((($S' ($C ((($C' ($S' _623)) (($B ($C _2)) _561)) (($B ($B (_623 _651))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _624)) ((($C' $B) (($B _718) (($B _641) ((($C' _756) _8) 0)))) (($B (_718 _644)) (($B (_657 "top level defns: ")) _605)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _624)) ((($C' $B) (($B _718) (($B _641) ((($C' _756) _8) 1)))) (_640 ($T (($B ($B (_718 _644))) ((($C' $B) (($B _657) ((($C' _657) _566) " = "))) _393)))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _9))) ((($S' $B) (($B ($C' ($C' _624))) ((($C' $B) ($B' (($B _718) (($B _646) _11)))) (($B _657) ((($C' _657) (($B (_657 _1)) _605)) (($O 10) $K)))))) (($B ($B (_623 _651))) ((($C' $B) ($B' (($B _718) (($B _641) ((($C' _756) _8) 0))))) (($B ($B (_718 _644))) ((($C' ($C' _657)) (($B ($B (_657 "final pass "))) (($B ($B (_618 6))) (($B ($B _605)) _750)))) "ms"))))))) _3))))) (($B (($C' $C) (($B ($C _662)) _393))) (($C _675) (_692 0))))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) ((($C' ($C' ($C' ($C' _657)))) (($B ($C' ($C' _657))) ((($C' ($C' ($C' _657))) (($B (($C' $B) (($B _657) ((($C' _657) (($B (_657 "(($A :")) _605)) (($O 32) $K))))) ($B _393))) ") "))) (($O 41) $K)))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _369)) $I))) ($BK $K))) $K))))) (($B (($S' _718) (($B _715) (($B (_718 _765)) (($B (_657 "main: findIdent: ")) _566))))) (($C' _595) _563)))) _602))) (($B ($B _599)) ((($C' $B) (($B _659) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _563))) $K)))))) (($C _675) (_692 0))))))) ($T $A))) ($T $K))) $I)) (($B (_718 _368)) (($B (_718 _561)) (($B (_657 (($O 95) $K))) _605)))))))) (($S (($S ((($S' _7) (($B _674) (_661 (_616 "-v")))) ((_691 _616) "-r"))) (($B (_655 (($O 46) $K))) (($B _717) (_660 ((_679 _741) "-i")))))) (($B (_718 _686)) ((($C' _657) (($B _717) (_660 ((_679 _741) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _752) _674) 1)) (_765 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _686)) (_661 ((_719 _761) ((_719 (_616 (($O 45) $K))) (_672 1))))))) (_682 ((_719 _761) (_616 "--")))))) (($A :1 "v3.3\10&") (($A :2 ((($S' ($S' _623)) _16) (($B ($B ($B (_623 _651)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _624) (($B (_718 _642)) (($B (_718 (_673 1000000))) _192)))))) (($B ($B ($B ($B (_623 _651))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _624))) ((($C' $B) ($B' (($B _718) (($B _641) ((($C' _756) _8) 0))))) (($B ($B (_718 _644))) ((($C' ($C' _657)) (($B ($B (_657 "combinator conversion "))) (($B ($B (_618 6))) (($B ($B _605)) _750)))) "ms")))))) (($B ($B _625)) (($B $P) (($C _569) (_561 "main")))))))) (_659 ($T ((($C' ($C' $O)) ((($C' $B) $P) _396)) $K))))))) (($A :3 ($T (($C ((($C' $C') (($B ($S' ($B (_623 _576)))) (($B ($B ($B (($C' _577) ((($C' _745) (($B _674) (_682 ((_719 _761) (_616 "--"))))) 1))))) (($B ($B ($B (_718 _6)))) ($C $C))))) (($B ($B $Y)) (($B ($B ($B _552))) (($C' ($C' _659)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _4))) $K))))))) (($B (($S' _718) (($B _715) (($B (_718 _765)) (($B (_657 "not found ")) _566))))) ($C _553))))) (($A :4 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _6)) _4)) _4))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _6)) $K))) ((($C' $B) _4) _395))) (($B (_718 (_715 (_765 "primlookup")))) (($C (_697 _616)) _5)))) $K))) (_765 "trans: impossible"))) (($A :5 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P (($O 67) $K)) $C)) (($O (($P (($O 65) $K)) $A)) (($O (($P "
\ No newline at end of file
+(($A :0 ((_623 _576) (($B ((($S' ($C ((($C' ($S' _623)) (($B ($C _2)) _561)) (($B ($B (_623 _651))) ((($C' ($C' $C)) ((($C' ($S' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' $S)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($C' ($C' ($C' ($C' ($C' $C))))) ((($C' ($C' ($C' $B))) (($B ($B ($B ($C' ($C' $S'))))) ((($C' ($C' ($C' ($C' ($C' $C'))))) ((($C' ($C' ($C' ($S' ($C' $C'))))) (($B ($B ($B ($B $B')))) ((($S' $B) ($B' ($B' (($B ($S' $B)) (($B ($B _624)) ((($C' $B) (($B _718) (($B _641) ((($C' _755) _8) 0)))) (($B (_718 _644)) (($B (_657 "top level defns: ")) _605)))))))) ((($S' $B) ($B' (($B ($C' $B)) (($B $B') (($B ($B _624)) ((($C' $B) (($B _718) (($B _641) ((($C' _755) _8) 1)))) (_640 ($T (($B ($B (_718 _644))) ((($C' $B) (($B _657) ((($C' _657) _566) " = "))) _393)))))))))) ((($C' $B) ((($S' $C') (($B $C') (($B $C') _9))) ((($S' $B) (($B ($C' ($C' _624))) ((($C' $B) ($B' (($B _718) (($B _646) _11)))) (($B _657) ((($C' _657) (($B (_657 _1)) _605)) (($O 10) $K)))))) (($B ($B (_623 _651))) ((($C' $B) ($B' (($B _718) (($B _641) ((($C' _755) _8) 0))))) (($B ($B (_718 _644))) ((($C' ($C' _657)) (($B ($B (_657 "final pass "))) (($B ($B (_618 6))) (($B ($B _605)) _749)))) "ms"))))))) _3))))) (($B (($C' $C) (($B ($C _662)) _393))) (($C _675) (_692 0))))) (($B ($C $B)) (($B ($B ($C $B))) (($B ($B $BK)) ((($C' ($C' ($C' ($C' _657)))) (($B ($C' ($C' _657))) ((($C' ($C' ($C' _657))) (($B (($C' $B) (($B _657) ((($C' _657) (($B (_657 "(($A :")) _605)) (($O 32) $K))))) ($B _393))) ") "))) (($O 41) $K)))))))) $T)) (($B $Y) ((($C' ($C' $S)) ((($C' ($C' $S)) ((($C' $B) $P) ((($S' ($C' $B)) ($B _369)) $I))) ($BK $K))) $K))))) (($B (($S' _718) (($B _715) (($B (_718 _762)) (($B (_657 "main: findIdent: ")) _566))))) (($C' _595) _563)))) _602))) (($B ($B _599)) ((($C' $B) (($B _659) (($B $T) (($B ($C $B)) (($B ($B $BK)) ((($C' ($C' ($C' $O))) ($B (($C' $P) _563))) $K)))))) (($C _675) (_692 0))))))) ($T $A))) ($T $K))) $I)) (($B (_718 _368)) (($B (_718 _561)) (($B (_657 (($O 95) $K))) _605)))))))) (($S (($S ((($S' _7) (($B _674) (_661 (_616 "-v")))) ((_691 _616) "-r"))) (($B (_655 (($O 46) $K))) (($B _717) (_660 ((_679 _740) "-i")))))) (($B (_718 _686)) ((($C' _657) (($B _717) (_660 ((_679 _740) "-o")))) (($O "out.comb") $K))))) (($B (($S (($C ((($C' _751) _674) 1)) (_762 "Usage: mhs [-v] [-r] [-iPATH] [-oFILE] ModuleName"))) _686)) (_661 ((_719 _760) ((_719 (_616 (($O 45) $K))) (_672 1))))))) (_682 ((_719 _760) (_616 "--")))))) (($A :1 "v3.3\10&") (($A :2 ((($S' ($S' _623)) _16) (($B ($B ($B (_623 _651)))) ((($C' ($C' $B)) (($B ($B ($C' (($S' _624) (($B (_718 _642)) (($B (_718 (_673 1000000))) _192)))))) (($B ($B ($B ($B (_623 _651))))) ((($C' $B) (($B ($C' $B)) (($B ($B ($C' _624))) ((($C' $B) ($B' (($B _718) (($B _641) ((($C' _755) _8) 0))))) (($B ($B (_718 _644))) ((($C' ($C' _657)) (($B ($B (_657 "combinator conversion "))) (($B ($B (_618 6))) (($B ($B _605)) _749)))) "ms")))))) (($B ($B _625)) (($B $P) (($C _569) (_561 "main")))))))) (_659 ($T ((($C' ($C' $O)) ((($C' $B) $P) _396)) $K))))))) (($A :3 ($T (($C ((($C' $C') (($B ($S' ($B (_623 _576)))) (($B ($B ($B (($C' _577) ((($C' _744) (($B _674) (_682 ((_719 _760) (_616 "--"))))) 1))))) (($B ($B ($B (_718 _6)))) ($C $C))))) (($B ($B $Y)) (($B ($B ($B _552))) (($C' ($C' _659)) (($B ($B $T)) ((($C' ($C' ($C' ($C' $O)))) (($B ($B (($C' $B) $P))) ($B _4))) $K))))))) (($B (($S' _718) (($B _715) (($B (_718 _762)) (($B (_657 "not found ")) _566))))) ($C _553))))) (($A :4 ((($C' $C) ((($S' $C) ((($C' ($C' $S')) (($S $P) ((($S' ($C' $B)) (($B ($B _6)) _4)) _4))) ($BK $K))) ((($C' ($S' $C)) ((($C' ($C' $C)) (($B (($C' $C) (($B ($P _6)) $K))) ((($C' $B) _4) _395))) (($B (_718 (_715 (_762 "primlookup")))) (($C (_697 _616)) _5)))) $K))) (_762 "trans: impossible"))) (($A :5 (($O (($P (($O 66) $K)) $B)) (($O (($P (($O 79) $K)) $O)) (($O (($P (($O 75) $K)) $K)) (($O (($P "C'") $C')) (($O (($P (($O 67) $K)) $C)) (($O (($P (($O 65) $K)) $A)) (($O (($P "
\ No newline at end of file
--- a/lib/Data/Tuple.hs
+++ b/lib/Data/Tuple.hs
@@ -1,9 +1,12 @@
-- Copyright 2023 Lennart Augustsson
-- See LICENSE file for full license.
-module Data.Tuple(module Data.Tuple) where
+module Data.Tuple(module Data.Tuple
+--Y{-+ , ()(..)
+--Y-}
+ ) where
+import Primitives -- for ()
import Data.Bool
-
-data () = () -- Parser hacks allows () to be used --Z
--data (a,b) = (a,b) -- all tuples are built in
--data (a,b,c) = (a,b,c)
--- a/lib/Primitives.hs
+++ b/lib/Primitives.hs
@@ -1,7 +1,7 @@
-- Copyright 2023 Lennart Augustsson
-- See LICENSE file for full license.
module Primitives(module Primitives) where
---import Data.Bool_Type
+import Data.Bool_Type
infixr -1 ->
@@ -12,6 +12,8 @@
data IO a
data Word
+data () = () -- Parser hacks allows () to be used
+
primIntAdd :: Int -> Int -> Int
primIntAdd = primitive "+"
primIntSub :: Int -> Int -> Int
@@ -91,8 +93,6 @@
primUnsafeCoerce :: forall a b . a -> b
primUnsafeCoerce = primitive "I"
-
---data List a = Nil | (:) a (List a)
primBind :: forall a b . IO a -> (a -> IO b) -> IO b
primBind = primitive "IO.>>="
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -77,7 +77,7 @@
let
mk = mkIdentLoc fn loc
- (mk . map (const ',') <$> (pSpec '(' *> some (pSpec ',') <* pSpec ')'))+ (mk . map (const ',') <$> (pSpec '(' *> esome (pSpec ',') <* pSpec ')')) <|> (mk "()" <$ (pSpec '(' *> pSpec ')')) -- Allow () as a constructor name<|> (mk "[]" <$ (pSpec '[' *> pSpec ']')) -- Allow [] as a constructor name
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -289,11 +289,12 @@
in (i, [entry (unIdent i) $ ETypeScheme [] $ foldr kArrow kType (replicate n kType)])
in
[
+ -- The function arrow is bothersome to define in Primtives, so keep it here.
(mkIdent "->", [entry "Primitives.->" kTypeTypeTypeS]),
(mkIdent "String", [entry "Data.Char.String" kTypeS]),
- (mkIdent "[]", [entry "Data.List.[]" kTypeTypeS]),
- (mkIdent "()", [entry "Data.Tuple.()" kTypeS]),
- (mkIdent "Bool", [entry "Data.Bool_Type.Bool" kTypeS])] ++
+ (mkIdent "[]", [entry "Data.List.[]" kTypeTypeS])
+-- (mkIdent "()", [entry "Data.Tuple.()" kTypeS])
+ ] ++
map tuple (enumFromTo 2 10)
primValues :: [(Ident, [Entry])]
--
⑨