shithub: MicroHs

Download patch

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])]
--