From 4145e966859dccc5bf7fac1f1c74b3efd8b6b7e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 26 Aug 2026 21:29:08 +0200 Subject: Use closure instead of failing with ambiguous type for argument types with free variables --- src/Parser.hs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'src/Parser.hs') diff --git a/src/Parser.hs b/src/Parser.hs index 928dd88..62549eb 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -102,13 +102,8 @@ parseDefinition href = label "symbol definition" $ do modify $ \s -> s { testVars = ( name, ( GlobalVarName (testCurrentModuleName s) name, someExprType expr )) : testVars s } return def where - getInferredTypes atypes = forM atypes $ \( off, vname, tvar@(TypeVar tvarname) ) -> do - let err msg = do - registerParseError . FancyError off . S.singleton . ErrorFail $ T.unpack msg - return ( vname, SomeArgumentType OptionalArgument (ExprTypeForall (TypeVar "a") (ExprTypeVar (TypeVar "a"))) ) - gets (M.lookup tvar . testTypeUnif) >>= \case - Just t -> return ( vname, SomeArgumentType RequiredArgument t ) - Nothing -> err $ "ambiguous type for ‘" <> textVarName vname <> " : " <> tvarname <> "’" + getInferredTypes atypes = forM atypes $ \( _, vname, tvar ) -> do + ( vname, ) . SomeArgumentType OptionalArgument <$> typeClosure (ExprTypeVar tvar) replaceDynArgs :: forall a. Expr a -> TestParser (Expr a) replaceDynArgs expr = do -- cgit v1.2.3