Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 5dbf727

Browse files
committed
Generalize in pure code.
1 parent a83cdff commit 5dbf727

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

semantic-core/src/Analysis/Typecheck.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import qualified Data.IntSet as IntSet
2727
import Data.List.NonEmpty (nonEmpty)
2828
import Data.Loc
2929
import qualified Data.Map as Map
30+
import Data.Maybe (fromJust)
3031
import Data.Name as Name
3132
import Data.Scope
3233
import qualified Data.Set as Set
@@ -77,10 +78,8 @@ forAll n body = send (PForAll (Data.Scope.bind1 n body))
7778
forAlls :: (Eq a, Carrier sig m, Member Polytype sig, Foldable t) => t a -> m a -> m a
7879
forAlls ns body = foldr forAll body ns
7980

80-
generalize :: (Carrier sig m, Member Naming sig) => Term Monotype Meta -> m (Term (Polytype :+: Monotype) Gensym)
81-
generalize ty = namespace "generalize" $ do
82-
Gensym root _ <- Name.fresh
83-
pure (Gensym root <$> forAlls (IntSet.toList (mvs ty)) (hoistTerm R ty))
81+
generalize :: Term Monotype Meta -> Term (Polytype :+: Monotype) Gensym
82+
generalize ty = fromJust (closed (forAlls (IntSet.toList (mvs ty)) (hoistTerm R ty)))
8483

8584

8685
typecheckingFlowInsensitive :: [File (Term Core.Core Name)] -> (Heap Name (Term Monotype Meta), [File (Either (Loc, String) (Term (Polytype :+: Monotype) Gensym))])
@@ -89,7 +88,7 @@ typecheckingFlowInsensitive
8988
. runFresh
9089
. runNaming
9190
. runHeap (Gen (Gensym (Nil :> "root") 0))
92-
. (>>= traverse (traverse (traverse generalize)))
91+
. fmap (fmap (fmap (fmap generalize)))
9392
. traverse runFile
9493

9594
runFile :: ( Carrier sig m

0 commit comments

Comments
 (0)