diff options
author | Camil Staps | 2017-08-15 16:05:26 +0200 |
---|---|---|
committer | Camil Staps | 2017-08-15 16:05:26 +0200 |
commit | e341ae62f15d59f64c66cc0abdf628fb160506e0 (patch) | |
tree | 107d49c9fb014d5300f8ba6b0790e874384f9530 /Sil/Types.icl | |
parent | Fix erroneous change from c5c4788b282a371fdc989e2d13430701f3457441 (diff) |
Made some more errors positional (#5)
Diffstat (limited to 'Sil/Types.icl')
-rw-r--r-- | Sil/Types.icl | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/Sil/Types.icl b/Sil/Types.icl index 6f802d3..a68a7b8 100644 --- a/Sil/Types.icl +++ b/Sil/Types.icl @@ -66,65 +66,65 @@ where instance type Expression where - type res (Name n) = type res n - type res (Literal lit) = case lit of + type res (Name _ n) = type res n + type res (Literal _ lit) = case lit of BLit _ -> Just $ Ok TBool ILit _ -> Just $ Ok TInt - type res (App n args) = + type res (App _ n args) = mapM (type res) args >>= \ats -> res n >>= \ft -> pure ( sequence ats >>= \ats -> ft >>= \ft -> foldM tryApply ft ats) - type res (BuiltinApp op e) = + type res (BuiltinApp _ op e) = type res e >>= \te -> type res op >>= \top -> pure ( top >>= \top -> te >>= \te -> tryApply top te) - type res (BuiltinApp2 e1 Cons e2) = + type res (BuiltinApp2 _ e1 Cons e2) = type res e1 >>= \te1 -> type res e2 >>= \te2 -> pure ( te1 >>= \te1 -> te2 >>= \te2 -> let top = te1 --> TList te1 --> TList te1 in foldM tryApply top [te1,te2]) - type res (BuiltinApp2 e1 op e2) = + type res (BuiltinApp2 _ e1 op e2) = type res e1 >>= \te1 -> type res e2 >>= \te2 -> type res op >>= \top -> pure ( top >>= \top -> te1 >>= \te1 -> te2 >>= \te2 -> foldM tryApply top [te1,te2]) - type res e=:(List (Just t) es) = + type res e=:(List _ (Just t) es) = mapM (type res) es >>= \tes -> pure (sequence tes >>= \tes -> case [(e,t`) \\ e <- es & t` <- tes | t <> t`] of [(e`,t`):_] -> Error $ C_TypeMisMatch t e` t` [] -> Ok $ TList t) - type res (List Nothing []) = Nothing - type res e=:(List Nothing es) = + type res (List _ Nothing []) = Nothing + type res e=:(List _ Nothing es) = mapM (type res) es >>= \tes -> pure (sequence tes >>= \tes -> case removeDup tes of [t] -> Ok $ TList t [_:_] -> Error $ C_CouldNotDeduceType e) - type res (Tuple n es) - | n > 32 = Just $ Error $ T_TooHighTupleArity n + type res e=:(Tuple _ n es) + | n > 32 = Just $ Error $ T_TooHighTupleArity (errpos e) n | otherwise = mapM (type res) es >>= \ats -> pure (sequence ats >>= pure o TTuple n) - type res (Field f e) + type res fe=:(Field _ f e) | isTuple = type res e >>= \te -> pure (te >>= \te -> case te of TTuple arity es -> if (0 < tupleEl && tupleEl <= arity) (Ok $ es!!(tupleEl - 1)) - (Error $ T_IllegalField f te) - _ -> Error $ T_IllegalField f te) + (Error $ T_IllegalField (errpos fe) f te) + _ -> Error $ T_IllegalField (errpos fe) f te) | f == "hd" = type res e >>= \te -> pure (te >>= \te -> case te of TList t -> Ok t - _ -> Error $ T_IllegalField f te) + _ -> Error $ T_IllegalField (errpos fe) f te) | f == "tl" = type res e >>= \te -> pure (te >>= \te -> case te of t=:(TList _) -> Ok t - _ -> Error $ T_IllegalField f te) + _ -> Error $ T_IllegalField (errpos fe) f te) | f == "nil" = type res e >>= \te -> pure (te >>= \te -> case te of (TList _) -> Ok TBool - _ -> Error $ T_IllegalField f te) - | otherwise = type res e >>= \te -> pure (te >>= Error o T_IllegalField f) + _ -> Error $ T_IllegalField (errpos fe) f te) + | otherwise = type res e >>= \te -> pure (te >>= Error o T_IllegalField (errpos fe) f) where f` = fromString f |