aboutsummaryrefslogtreecommitdiff
path: root/Sil/Types.icl
diff options
context:
space:
mode:
authorCamil Staps2017-08-15 16:05:26 +0200
committerCamil Staps2017-08-15 16:05:26 +0200
commite341ae62f15d59f64c66cc0abdf628fb160506e0 (patch)
tree107d49c9fb014d5300f8ba6b0790e874384f9530 /Sil/Types.icl
parentFix erroneous change from c5c4788b282a371fdc989e2d13430701f3457441 (diff)
Made some more errors positional (#5)
Diffstat (limited to 'Sil/Types.icl')
-rw-r--r--Sil/Types.icl36
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