Skip to content

Commit 4d68ebd

Browse files
committed
save work
1 parent b252926 commit 4d68ebd

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

src/Language/PureScript/Interface/Types.hs

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@ import Language.PureScript.Sugar.Names.Env (primEnv)
1515
import Language.PureScript.TypeChecker (typeCheckModule, emptyCheckState, debugType)
1616
import Text.Pretty.Simple (pPrint)
1717
import Data.String (String)
18+
import Language.PureScript.AST.Binders (Binder (..))
19+
import Debug.Pretty.Simple (pTraceShow)
1820

19-
data NodeContext = DeclarationNode | ExpressionNode
21+
data NodeContext
22+
= DeclarationNode
23+
| BinderNode
24+
| ExpressionNode
2025
deriving (Show)
2126

2227
data NodeInfo a = NodeInfo
@@ -69,8 +74,8 @@ mergeASTs xs@(x : xr) ys@(y : yr)
6974
source :: Text
7075
source = unlines
7176
[ "module Main where"
72-
, "values :: Array Int"
73-
, "values = [0, 1]"
77+
, "values :: Int -> Array Int"
78+
, "values x = [x]"
7479
]
7580

7681
main :: IO ()
@@ -90,21 +95,32 @@ main = do
9095

9196
where
9297
declarationToAST :: Declaration -> [InterfaceAST String]
93-
(declarationToAST, _, _, _, _) = everythingOnValues mergeASTs onDecl onExpr noAST noAST noAST
98+
(declarationToAST, _, _, _, _) = everythingOnValues mergeASTs onDecl onExpr onBinder noAST noAST
9499
where
95100
noAST :: forall a. a -> [InterfaceAST String]
96101
noAST = const []
97102

98103
onDecl :: Declaration -> [InterfaceAST String]
99104
onDecl = \case
100-
ValueDecl (s, _) _ _ _ [MkUnguarded (TypedValue _ (PositionedValue _ _ _) t)] ->
101-
[ makeNode (NodeInfo (debugType t) DeclarationNode) s ]
102-
_ ->
103-
[]
105+
-- ValueDecl (s, _) _ _ _ [MkUnguarded (TypedValue _ (PositionedValue _ _ _) t)] ->
106+
-- [ makeNode (NodeInfo (debugType t) DeclarationNode) s ]
107+
e ->
108+
pTraceShow e []
104109

105110
onExpr :: Expr -> [InterfaceAST String]
106111
onExpr = \case
107112
TypedValue _ (PositionedValue s _ _) t ->
108113
[ makeNode (NodeInfo (debugType t) ExpressionNode) s ]
109114
_ ->
110115
[]
116+
117+
onBinder :: Binder -> [InterfaceAST String]
118+
onBinder = \case
119+
TypedBinder t (LiteralBinder s _) ->
120+
[ makeNode (NodeInfo (debugType t) BinderNode) s ]
121+
TypedBinder t (VarBinder s _) ->
122+
[ makeNode (NodeInfo (debugType t) BinderNode) s ]
123+
TypedBinder t (ConstructorBinder s _ _) ->
124+
[ makeNode (NodeInfo (debugType t) BinderNode) s ]
125+
_ ->
126+
[]

src/Language/PureScript/TypeChecker/Types.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,8 +683,9 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
683683
guardWith (errorMessage $ OverlappingArgNames Nothing) $
684684
let ns = concatMap binderNames binders in length (ordNub ns) == length ns
685685
m1 <- M.unions <$> zipWithM inferBinder nvals binders
686+
let binders' = zipWith TypedBinder nvals binders
686687
r <- bindLocalVariables [ (ss, name, ty, Defined) | (name, (ss, ty)) <- M.toList m1 ] $
687-
CaseAlternative binders <$> forM result (\ge -> checkGuardedRhs ge ret)
688+
CaseAlternative binders' <$> forM result (\ge -> checkGuardedRhs ge ret)
688689
rs <- checkBinders nvals ret bs
689690
return $ r : rs
690691

@@ -707,7 +708,7 @@ checkGuardedRhs (GuardedExpr (PatternGuard binder expr : guards) rhs) ret = do
707708
| (name, (ss, bty)) <- M.toList variables
708709
] $
709710
checkGuardedRhs (GuardedExpr guards rhs) ret
710-
return $ GuardedExpr (PatternGuard binder (tvToExpr tv) : guards') rhs'
711+
return $ GuardedExpr (PatternGuard (TypedBinder ty binder) (tvToExpr tv) : guards') rhs'
711712

712713
-- |
713714
-- Check the type of a value, rethrowing errors to provide a better error message
@@ -779,7 +780,7 @@ check' (Abs binder ret) ty@(TypeApp _ (TypeApp _ t argTy) retTy)
779780
| VarBinder ss arg <- binder = do
780781
unifyTypes t tyFunction
781782
ret' <- withBindingGroupVisible $ bindLocalVariables [(ss, arg, argTy, Defined)] $ check ret retTy
782-
return $ TypedValue' True (Abs (VarBinder ss arg) (tvToExpr ret')) ty
783+
return $ TypedValue' True (Abs (TypedBinder argTy (VarBinder ss arg)) (tvToExpr ret')) ty
783784
| otherwise = internalError "Binder was not desugared"
784785
check' (App f arg) ret = do
785786
f'@(TypedValue' _ _ ft) <- infer f

0 commit comments

Comments
 (0)