ref: 7538234e888bc1e0dfa24ea05c4765706fb5a72c
parent: aa6fc08927f7d4e62ffb05cbf750e87960166286
author: Lennart Augustsson <lennart@augustsson.net>
date: Sun Oct 29 16:36:41 EDT 2023
Split list type to it's own module.
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,7 @@
$(GHCB) -c ghc/Primitives.hs
$(GHCB) -c ghc/Data/Bool_Type.hs
$(GHCB) -c ghc/Data/Char_Type.hs
+ $(GHCB) -c ghc/Data/List_Type.hs
$(GHCB) -c ghc/Data/Ordering_Type.hs
$(GHCB) -c ghc/Data/Double.hs
$(GHCB) -c ghc/PrimTable.hs
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
v4.0
1167
-((A :0 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :1 (T (BK (BK (BK K))))) ((A :2 (T (K (BK (BK K))))) ((A :3 (T (K (K (BK K))))) ((A :4 (T (K (K (K K))))) ((A :5 (T (K (K (K A))))) ((A :6 (K (noDefault "Alternative.empty"))) ((A :7 (K (noDefault "Alternative.<|>"))) ((A :8 ((S (((S' S') ((B _14) _1)) (((C' _137) ((B _12) _1)) _170))) _5)) ((A :9 ((S (((S' C') _3) _4)) (((C' _13) _1) _169))) ((A :10 (((S' P) _2) (((C' _13) _1) _931))) ((A :11 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :12 (T (BK (BK (BK K))))) ((A :13 (T (K (BK (BK K))))) ((A :14 (T (K (K (BK K))))) ((A :15 (T (K (K (K K))))) ((A :16 (T (K (K (K A))))) ((A :17 (K (noDefault "Applicative.pure"))) ((A :18 (K (noDefault "Applicative.<*>"))) ((A :19 (((S' B) _14) (((C' _134) _12) _126))) ((A :20 (((S' B) _14) (((C' _137) _12) _127))) ((A :21 _1003) ((A :22 ((B _1045) _21)) ((A :23 (((S' _1045) _21) I)) ((A :24 _973) ((A :25 (_24 "undefined")) ((A :26 I) ((A :27 (((C' B) _1002) ((C _125) _26))) ((A :28 (((C' _27) ((_133 _1016) _114)) ((_125 (_34 _1018)) _113))) ((A :29 ((B ((S _1045) (_34 _1018))) _24)) ((A :30 ((B (B (B C))) ((B (B C)) P))) ((A :31 (T (BK (BK K)))) ((A :32 (T (K (BK K)))) ((A :33 (T (K (K K)))) ((A :34 (T (K (K A)))) ((A :35 (K (noDefault "Monad.>>="))) ((A :36 (((C' (C' B)) _32) K)) ((A :37 ((B _13) _31)) ((A :38 (((S' (C' B)) _32) (((S' (C' B)) _32) (B' _34)))) ((A :39 P) ((A :40 (T K)) ((A :41 (T A)) ((A :42 (K _24)) ((A :43 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _169)))) (((S' (C' B)) ((B (B (C' B))) (B' _32))) (((S' (C' (C' B))) (B' _32)) (((C' B) (B' _34)) _170)))))) ((A :44 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _931)))) (((C' (C' B)) ((B (B (C' B))) (B' _32))) BK)))) ((A :45 ((B T) ((C _34) _931))) ((A :46 ((C _43) _126)) ((A :47 ((B _128) _32)) ((A :48 ((B C) ((B C') _32))) ((A :49 ((B _128) _48)) ((A :50 ((_132 _176) (_136 _50))) ((A :51 (((((_11 _50) ((C O) K)) (_38 _52)) (_19 _51)) (_20 _51))) ((A :52 ((((_30 _51) (_128 _175)) (_36 _52)) (_37 _52))) ((A :53 ((_39 _52) (K _169))) ((A :54 ((_132 ((B (P _244)) (B _245))) (_136 _54))) ((A :55 (((((_11 _54) _245) (_38 _56)) (_19 _55)) (_20 _55))) ((A :56 ((((_30 _55) (T _244)) (_36 _56)) (_37 _56))) ((A :57 T) ((A :58 ((_132 ((B (B (_123 _57))) ((B ((C' C) _61)) (B P)))) (_136 _58))) ((A :59 (((((_11 _58) ((B (_123 _57)) P)) (_38 _60)) ((B (B (_123 _57))) (((C' B) ((B C) _61)) (BK _61)))) (_20 _59))) ((A :60 ((((_30 _59) ((B (B (_123 _57))) (((C' B) ((B C) _61)) (B _61)))) (_15 _59)) (_13 _59))) ((A :61 (T I)) ((A :62 ((B (_125 _256)) _61)) ((A :63 ((B (_123 _57)) (B (P _931)))) ((A :64 ((B (_123 _57)) (BK (P _931)))) ((A :65 ((_123 _57) ((S P) I))) ((A :66 ((B (_123 _57)) ((C (S' P)) I))) ((A :67 (R _74)) ((A :68 (T _73)) ((A :69 ((P _74) _73)) ((A :70 _74) ((A :71 ((C ((C S') _69)) I)) ((A :72 ((C S) _69)) ((A :73 K) ((A :74 A) ((A :75 ((_117 _967) _968)) ((A :76 ((_117 _977) (_121 _76))) ((A :77 _978) ((A :78 _979) ((A :79 (((S' _68) (_970 #97)) ((C _970) #122))) ((A :80 (((S' _68) (_970 #65)) ((C _970) #90))) ((A :81 (((S' _67) _79) _80)) ((A :82 (((S' _68) (_970 #48)) ((C _970) #57))) ((A :83 (((S' _67) _81) _82)) ((A :84 (((S' _68) (_970 #32)) ((C _970) #126))) ((A :85 _967) ((A :86 _968) ((A :87 _970) ((A :88 _969) ((A :89 (((S' _67) ((C (_118 _75)) #32)) (((S' _67) ((C (_118 _75)) #9)) ((C (_118 _75)) #10)))) ((A :90 ((S ((S (((S' _68) (_87 #65)) ((C _87) #90))) (_74 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _77) (((C' _138) (((C' _139) _78) (_78 #65))) (_78 #97))))) ((A :91 ((S ((S (((S' _68) (_87 #97)) ((C _87) #97))) (_74 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _77) (((C' _138) (((C' _139) _78) (_78 #97))) (_78 #65))))) ((A :92 _938) ((A :93 _939) ((A :94 _940) ((A :95 _941) ((A :96 (_93 %0.0)) ((A :97 _92) ((A :98 _93) ((A :99 _94) ((A :100 _95) ((A :101 ((_117 _942) _943)) ((A :102 (_118 _101)) ((A :103 (_119 _101)) ((A :104 _944) ((A :105 _945) ((A :106 _946) ((A :107 _947) ((A :108 _104) ((A :109 _105) ((A :110 _106) ((A :111 _107) ((A :112 _948) ((A :113 ((B BK) T)) ((A :114 (BK T)) ((A :115 (((S' _117) (((S' C) ((B (C S')) (((C' C)
\ No newline at end of file
+((A :0 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :1 (T (BK (BK (BK K))))) ((A :2 (T (K (BK (BK K))))) ((A :3 (T (K (K (BK K))))) ((A :4 (T (K (K (K K))))) ((A :5 (T (K (K (K A))))) ((A :6 (K (noDefault "Alternative.empty"))) ((A :7 (K (noDefault "Alternative.<|>"))) ((A :8 ((S (((S' S') ((B _14) _1)) (((C' _137) ((B _12) _1)) _243))) _5)) ((A :9 ((S (((S' C') _3) _4)) (((C' _13) _1) _242))) ((A :10 (((S' P) _2) (((C' _13) _1) _931))) ((A :11 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :12 (T (BK (BK (BK K))))) ((A :13 (T (K (BK (BK K))))) ((A :14 (T (K (K (BK K))))) ((A :15 (T (K (K (K K))))) ((A :16 (T (K (K (K A))))) ((A :17 (K (noDefault "Applicative.pure"))) ((A :18 (K (noDefault "Applicative.<*>"))) ((A :19 (((S' B) _14) (((C' _134) _12) _126))) ((A :20 (((S' B) _14) (((C' _137) _12) _127))) ((A :21 _1003) ((A :22 ((B _1045) _21)) ((A :23 (((S' _1045) _21) I)) ((A :24 _973) ((A :25 (_24 "undefined")) ((A :26 I) ((A :27 (((C' B) _1002) ((C _125) _26))) ((A :28 (((C' _27) ((_133 _1016) _114)) ((_125 (_34 _1018)) _113))) ((A :29 ((B ((S _1045) (_34 _1018))) _24)) ((A :30 ((B (B (B C))) ((B (B C)) P))) ((A :31 (T (BK (BK K)))) ((A :32 (T (K (BK K)))) ((A :33 (T (K (K K)))) ((A :34 (T (K (K A)))) ((A :35 (K (noDefault "Monad.>>="))) ((A :36 (((C' (C' B)) _32) K)) ((A :37 ((B _13) _31)) ((A :38 (((S' (C' B)) _32) (((S' (C' B)) _32) (B' _34)))) ((A :39 P) ((A :40 (T K)) ((A :41 (T A)) ((A :42 (K _24)) ((A :43 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _242)))) (((S' (C' B)) ((B (B (C' B))) (B' _32))) (((S' (C' (C' B))) (B' _32)) (((C' B) (B' _34)) _243)))))) ((A :44 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _931)))) (((C' (C' B)) ((B (B (C' B))) (B' _32))) BK)))) ((A :45 ((B T) ((C _34) _931))) ((A :46 ((C _43) _126)) ((A :47 ((B _128) _32)) ((A :48 ((B C) ((B C') _32))) ((A :49 ((B _128) _48)) ((A :50 ((_132 _174) (_136 _50))) ((A :51 (((((_11 _50) ((C O) K)) (_38 _52)) (_19 _51)) (_20 _51))) ((A :52 ((((_30 _51) (_128 _173)) (_36 _52)) (_37 _52))) ((A :53 ((_39 _52) (K _242))) ((A :54 ((_132 ((B (P _244)) (B _245))) (_136 _54))) ((A :55 (((((_11 _54) _245) (_38 _56)) (_19 _55)) (_20 _55))) ((A :56 ((((_30 _55) (T _244)) (_36 _56)) (_37 _56))) ((A :57 T) ((A :58 ((_132 ((B (B (_123 _57))) ((B ((C' C) _61)) (B P)))) (_136 _58))) ((A :59 (((((_11 _58) ((B (_123 _57)) P)) (_38 _60)) ((B (B (_123 _57))) (((C' B) ((B C) _61)) (BK _61)))) (_20 _59))) ((A :60 ((((_30 _59) ((B (B (_123 _57))) (((C' B) ((B C) _61)) (B _61)))) (_15 _59)) (_13 _59))) ((A :61 (T I)) ((A :62 ((B (_125 _256)) _61)) ((A :63 ((B (_123 _57)) (B (P _931)))) ((A :64 ((B (_123 _57)) (BK (P _931)))) ((A :65 ((_123 _57) ((S P) I))) ((A :66 ((B (_123 _57)) ((C (S' P)) I))) ((A :67 (R _74)) ((A :68 (T _73)) ((A :69 ((P _74) _73)) ((A :70 _74) ((A :71 ((C ((C S') _69)) I)) ((A :72 ((C S) _69)) ((A :73 K) ((A :74 A) ((A :75 ((_117 _967) _968)) ((A :76 ((_117 _977) (_121 _76))) ((A :77 _978) ((A :78 _979) ((A :79 (((S' _68) (_970 #97)) ((C _970) #122))) ((A :80 (((S' _68) (_970 #65)) ((C _970) #90))) ((A :81 (((S' _67) _79) _80)) ((A :82 (((S' _68) (_970 #48)) ((C _970) #57))) ((A :83 (((S' _67) _81) _82)) ((A :84 (((S' _68) (_970 #32)) ((C _970) #126))) ((A :85 _967) ((A :86 _968) ((A :87 _970) ((A :88 _969) ((A :89 (((S' _67) ((C (_118 _75)) #32)) (((S' _67) ((C (_118 _75)) #9)) ((C (_118 _75)) #10)))) ((A :90 ((S ((S (((S' _68) (_87 #65)) ((C _87) #90))) (_74 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _77) (((C' _138) (((C' _139) _78) (_78 #65))) (_78 #97))))) ((A :91 ((S ((S (((S' _68) (_87 #97)) ((C _87) #97))) (_74 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _77) (((C' _138) (((C' _139) _78) (_78 #97))) (_78 #65))))) ((A :92 _938) ((A :93 _939) ((A :94 _940) ((A :95 _941) ((A :96 (_93 %0.0)) ((A :97 _92) ((A :98 _93) ((A :99 _94) ((A :100 _95) ((A :101 ((_117 _942) _943)) ((A :102 (_118 _101)) ((A :103 (_119 _101)) ((A :104 _944) ((A :105 _945) ((A :106 _946) ((A :107 _947) ((A :108 _104) ((A :109 _105) ((A :110 _106) ((A :111 _107) ((A :112 _948) ((A :113 ((B BK) T)) ((A :114 (BK T)) ((A :115 (((S' _117) (((S' C) ((B (C S')) (((C' C)
\ No newline at end of file
--- a/lib/Control/Error.hs
+++ b/lib/Control/Error.hs
@@ -2,8 +2,9 @@
-- See LICENSE file for full license.
module Control.Error(module Control.Error) where
import Primitives
+import Data.Char_Type
-error :: forall a . [Char] -> a
+error :: forall a . String -> a
error = primError
undefined :: forall a . a
--- a/lib/Data/Char_Type.hs
+++ b/lib/Data/Char_Type.hs
@@ -1,5 +1,5 @@
module Data.Char_Type(Char, String) where
import Primitives
---import Data.List_Type
+import Data.List_Type
type String = [Char]
--- a/lib/Data/List.hs
+++ b/lib/Data/List.hs
@@ -1,6 +1,9 @@
-- Copyright 2023 Lennart Augustsson
-- See LICENSE file for full license.
-module Data.List(module Data.List) where
+module Data.List(
+ module Data.List,
+ module Data.List_Type
+ ) where
import Primitives as P
import Control.Error
import Data.Bool
@@ -7,15 +10,11 @@
import Data.Eq
import Data.Function
import Data.Int
+import Data.List_Type
import Data.Maybe
import Data.Tuple
--Yimport Data.Char
-
---Y{--infixr 5 :
-data [] a = [] | (:) a [a] -- Parser hacks makes this acceptable
---Y-}
instance forall a . Eq a => Eq [a] where
[] == [] = True
--- a/lib/Primitives.hs
+++ b/lib/Primitives.hs
@@ -2,6 +2,7 @@
-- See LICENSE file for full license.
module Primitives(module Primitives) where
import Data.Bool_Type
+import Data.List_Type
import Data.Ordering_Type
infixr -1 ->
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -30,7 +30,7 @@
boolPrefix = "Data.Bool_Type."
listPrefix :: String
-listPrefix = "Data.List."
+listPrefix = "Data.List_Type."
data TModule a = TModule
IdentModule -- module names
@@ -555,6 +555,7 @@
(mkIdentB "=>", [entry "Primitives.=>" kConstraintTypeTypeS]),
(mkIdentB "~", [entry "Primitives.~" kTypeTypeConstraintS]),
-- Primitives.hs uses the type [], and it's annoying to fix that.
+ -- XXX should not be needed
(mkIdentB (listPrefix ++ "[]"), [entry (listPrefix ++ "[]") kTypeTypeS])
] ++
map tuple (enumFromTo 2 10)
--
⑨