shithub: MicroHs

Download patch

ref: 4300473e0bd6b60de9724b537c1060842d42ed5d
parent: 46673fc845c588c477b815ce6e3fd2ca195493eb
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Oct 13 16:04:39 EDT 2024

Some more fixes for Mhs.Builtin

--- a/lib/Data/Functor/Identity.hs
+++ b/lib/Data/Functor/Identity.hs
@@ -11,7 +11,7 @@
 import Data.Functor
 import Data.Int
 import Data.Ord
-import Data.Records
+import Data.Records   -- needed since we don't import Mhs.Builtin
 import Text.Show
 
 newtype Identity a = Identity { runIdentity :: a }
--- a/lib/Mhs/Builtin.hs
+++ b/lib/Mhs/Builtin.hs
@@ -23,8 +23,9 @@
 import Data.Function((.))
 import Data.Ord(Ord(..), Ordering(..))
 import Data.Num(Num(fromInteger))
+import Data.Proxy(Proxy(..))
 import Data.Semigroup(Semigroup(..))
 import Data.String(IsString(..))
-import Data.Records(HasField(..), SetField(..))
+import Data.Records(HasField(..), SetField(..), composeSet)
 import {-# SOURCE #-} Data.Typeable(Typeable(..), mkTyConApp, mkTyCon)
 import Text.Show(Show(..), showString, showParen)
--- a/lib/System/IO/Error.hs
+++ b/lib/System/IO/Error.hs
@@ -79,7 +79,7 @@
 import Data.Int
 import Data.List
 import Data.Maybe
-import Data.Records
+import Data.Records   -- needed since we don't import Mhs.Builtin
 import Data.String
 import Data.Typeable
 import System.IO
--- a/mhs/MHSPrelude.hs
+++ b/mhs/MHSPrelude.hs
@@ -62,7 +62,7 @@
 import Data.Ord(Ord(..), Ordering(..))
 import Data.Ratio(Rational)
 import Data.Real(Real(..), realToFrac)
-import Data.Records  -- XXX redo this somehow
+import Data.Records  -- needed for data types with fields
 import Data.String(IsString(..), lines, unlines, words, unwords)
 import Data.Tuple(()(..), fst, snd, curry, uncurry)
 import Data.Word(Word)
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -1768,7 +1768,7 @@
 eSetFields :: EField -> Expr -> Expr
 eSetFields (EField is e) r =
   let loc = getSLoc is
-      eCompose = EVar $ mkIdentSLoc loc "composeSet"
+      eCompose = EVar $ mkBuiltin loc "composeSet"
       has = map eHasField $ init is
       set1 = eSetField (last is)
       set = foldr (EApp . EApp eCompose) set1 has
@@ -1777,19 +1777,19 @@
 
 eHasField :: Ident -> Expr
 eHasField i = EApp (EVar ihas) (eProxy i)
-  where ihas = mkIdentSLoc (getSLoc i) "hasField"
+  where ihas = mkBuiltin (getSLoc i) "hasField"
 
 eSetField :: Ident -> Expr
 eSetField i = EApp (EVar iset) (eProxy i)
-  where iset = mkIdentSLoc (getSLoc i) "setField"
+  where iset = mkBuiltin (getSLoc i) "setField"
 
 eGetField :: Ident -> Expr
 eGetField i = EApp (EVar iget) (eProxy i)
-  where iget = mkIdentSLoc (getSLoc i) "getField"
+  where iget = mkBuiltin (getSLoc i) "getField"
 
 eProxy :: Ident -> Expr
 eProxy i = ESign proxy (EApp proxy (ELit loc (LStr (unIdent i))))
-  where proxy = EVar $ mkIdentSLoc loc "Proxy"
+  where proxy = EVar $ mkBuiltin loc "Proxy"
         loc = getSLoc i
 
 dsEField :: Expr -> EField -> T [EField]
@@ -2083,7 +2083,7 @@
 tcPat :: Expected -> EPat -> T EPatRet
 tcPat mt ae =
   let loc = getSLoc ae
-      lit = tcPat mt (EViewPat (EApp (EVar (mkIdentSLoc loc "==")) ae) (EVar (mkIdentSLoc loc "True")))
+      lit = tcPat mt (EViewPat (EApp (EVar (mkBuiltin loc "==")) ae) (EVar (mkBuiltin loc "True")))
       isNeg (EVar i) = i == mkIdent "negate"
       isNeg _ = False
   in
--