From 46177c17c57d02b93f5f4827eb99c7993e543ac2 Mon Sep 17 00:00:00 2001 From: Veit Heller Date: Fri, 7 Jan 2022 17:43:22 +0100 Subject: [PATCH 1/2] fix: #1347 by introducing predicate --- src/Primitives.hs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Primitives.hs b/src/Primitives.hs index e555b56e1..8e0c7a237 100644 --- a/src/Primitives.hs +++ b/src/Primitives.hs @@ -182,10 +182,15 @@ define hidden ctx qualifiedXObj = defineInTypeEnv = pure . fromRight ctx . (insertTypeBinder ctx qpath) defineInGlobalEnv :: Binder -> IO Context defineInGlobalEnv newBinder = - when (projectEchoC (contextProj ctx)) (putStrLn (toC All (Binder emptyMeta annXObj))) + when (projectEchoC (contextProj ctx) && canBeEmitted annXObj) (putStrLn (toC All (Binder emptyMeta annXObj))) >> case (lookupBinderInGlobalEnv ctx qpath) of Left _ -> pure (fromRight ctx (insertInGlobalEnv ctx qpath newBinder)) Right oldBinder -> redefineExistingBinder oldBinder newBinder + canBeEmitted :: XObj -> Bool + canBeEmitted (XObj (Arr xs) _ _) = all canBeEmitted xs + canBeEmitted (XObj (Lst xs) _ _) = all canBeEmitted xs + canBeEmitted (XObj (Sym _ _) _ (Just t)) = not (isTypeGeneric t) + canBeEmitted _ = True redefineExistingBinder :: Binder -> Binder -> IO Context redefineExistingBinder old@(Binder meta _) (Binder _ x) = do From e1bc5974655062089acfe0889cbfca4bb335b974 Mon Sep 17 00:00:00 2001 From: Veit Heller Date: Mon, 10 Jan 2022 10:17:23 +0100 Subject: [PATCH 2/2] fix: simplify emission check in primitives (thanks @eriksvedang) --- src/Primitives.hs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Primitives.hs b/src/Primitives.hs index 8e0c7a237..c10cf8432 100644 --- a/src/Primitives.hs +++ b/src/Primitives.hs @@ -9,7 +9,7 @@ import Control.Applicative import Control.Monad (foldM, unless, when) import Control.Monad.IO.Class (MonadIO, liftIO) import Data.Bifunctor -import Data.Either (fromRight, rights) +import Data.Either (fromRight, isRight, rights) import Data.Functor ((<&>)) import Data.List (foldl') import Data.Maybe (fromJust, fromMaybe) @@ -187,10 +187,7 @@ define hidden ctx qualifiedXObj = Left _ -> pure (fromRight ctx (insertInGlobalEnv ctx qpath newBinder)) Right oldBinder -> redefineExistingBinder oldBinder newBinder canBeEmitted :: XObj -> Bool - canBeEmitted (XObj (Arr xs) _ _) = all canBeEmitted xs - canBeEmitted (XObj (Lst xs) _ _) = all canBeEmitted xs - canBeEmitted (XObj (Sym _ _) _ (Just t)) = not (isTypeGeneric t) - canBeEmitted _ = True + canBeEmitted x = isRight (checkForUnresolvedSymbols x) redefineExistingBinder :: Binder -> Binder -> IO Context redefineExistingBinder old@(Binder meta _) (Binder _ x) = do