Revert AnnForall change

This commit is contained in:
Martin Fredin 2023-05-04 23:54:19 +02:00
parent 15025a67f9
commit 0a588c4e14

View file

@ -8,7 +8,7 @@ import Control.Applicative (Applicative (liftA2))
import Control.Monad.Except (throwError)
import Data.Function (on)
import Data.Set (Set)
import Data.Set qualified as Set
import qualified Data.Set as Set
import Grammar.Abs
import Grammar.ErrM (Err)
@ -21,10 +21,12 @@ annotateForall (Program defs) = do
ss' = map (DSig . annSig) ss
(ds, ss, bs) = partitionDefs defs
annData :: Data -> Err Data
annData (Data typ injs) = do
(typ', tvars) <- annTyp typ
pure (Data typ' $ map (annInj tvars) injs)
where
annTyp typ = do
(bounded, ts) <- boundedTVars mempty typ
@ -40,10 +42,7 @@ annData (Data typ injs) = do
assertTVar typ = case typ of
TVar tvar -> pure tvar
_ ->
throwError $
unwords
[ "Misformed data declaration:"
_ -> throwError $ unwords [ "Misformed data declaration:"
, "Non type variable argument"
]
annInj tvars (Inj n t) =
@ -56,9 +55,7 @@ annBind :: Bind -> Err Bind
annBind (Bind name vars exp) = Bind name vars <$> annExp exp
where
annExp = \case
-- Annotated types should not be
-- foralled without the consent of the user
EAnn e t -> flip EAnn t <$> annExp e
EAnn e t -> flip EAnn (annType t) <$> annExp e
EApp e1 e2 -> liftA2 EApp (annExp e1) (annExp e2)
EAdd e1 e2 -> liftA2 EAdd (annExp e1) (annExp e2)
ELet bind e -> liftA2 ELet (annBind bind) (annExp e)
@ -82,9 +79,7 @@ unboundedTVars' bs typ = tvars.unbounded Set.\\ tvars.bounded
where
tvars = gatherTVars typ
gatherTVars = \case
TAll tvar t ->
TVars
{ bounded = Set.singleton tvar
TAll tvar t -> TVars { bounded = Set.singleton tvar
, unbounded = unboundedTVars' (Set.insert tvar bs) t
}
TVar tvar -> uTVars $ Set.singleton tvar
@ -95,12 +90,11 @@ unboundedTVars' bs typ = tvars.unbounded Set.\\ tvars.bounded
data TVars = TVars
{ bounded :: Set TVar
, unbounded :: Set TVar
}
deriving (Eq, Show, Ord)
} deriving (Eq, Show, Ord)
uTVars :: Set TVar -> TVars
uTVars us =
TVars
uTVars us = TVars
{ bounded = mempty
, unbounded = us
}