Add float literals to Bergamot
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
97fcae9c2c
commit
29a95d2659
|
@ -24,6 +24,7 @@ unUnificationVar (MkUnificationVar s) = s
|
||||||
|
|
||||||
type Term a
|
type Term a
|
||||||
= IntLit Int
|
= IntLit Int
|
||||||
|
| FloatLit Float
|
||||||
| StringLit String
|
| StringLit String
|
||||||
| Call Name (List (Term a))
|
| Call Name (List (Term a))
|
||||||
| Var a
|
| Var a
|
||||||
|
@ -32,6 +33,7 @@ map : (a -> b) -> Term a -> Term b
|
||||||
map f t =
|
map f t =
|
||||||
case t of
|
case t of
|
||||||
IntLit i -> IntLit i
|
IntLit i -> IntLit i
|
||||||
|
FloatLit ft -> FloatLit ft
|
||||||
StringLit s -> StringLit s
|
StringLit s -> StringLit s
|
||||||
Call n ts -> Call n (List.map (map f) ts)
|
Call n ts -> Call n (List.map (map f) ts)
|
||||||
Var a -> Var (f a)
|
Var a -> Var (f a)
|
||||||
|
@ -40,6 +42,7 @@ andThen : (a -> Term b) -> Term a -> Term b
|
||||||
andThen f t =
|
andThen f t =
|
||||||
case t of
|
case t of
|
||||||
IntLit i -> IntLit i
|
IntLit i -> IntLit i
|
||||||
|
FloatLit ft -> FloatLit ft
|
||||||
StringLit s -> StringLit s
|
StringLit s -> StringLit s
|
||||||
Call n ts -> Call n (List.map (andThen f) ts)
|
Call n ts -> Call n (List.map (andThen f) ts)
|
||||||
Var a -> f a
|
Var a -> f a
|
||||||
|
@ -79,6 +82,7 @@ instantiate : Term Metavariable -> InstantiationState -> (Term UnificationVar, I
|
||||||
instantiate mt is =
|
instantiate mt is =
|
||||||
case mt of
|
case mt of
|
||||||
IntLit i -> (IntLit i, is)
|
IntLit i -> (IntLit i, is)
|
||||||
|
FloatLit f -> (FloatLit f, is)
|
||||||
StringLit s -> (StringLit s, is)
|
StringLit s -> (StringLit s, is)
|
||||||
Call n mts -> Tuple.mapFirst (Call n) (instantiateList mts is)
|
Call n mts -> Tuple.mapFirst (Call n) (instantiateList mts is)
|
||||||
Var mv -> Tuple.mapFirst Var (metavariable mv is)
|
Var mv -> Tuple.mapFirst Var (metavariable mv is)
|
||||||
|
@ -157,6 +161,7 @@ occurs : Set String -> UnificationState -> Term UnificationVar -> Bool
|
||||||
occurs vars us t =
|
occurs vars us t =
|
||||||
case t of
|
case t of
|
||||||
IntLit _ -> False
|
IntLit _ -> False
|
||||||
|
FloatLit _ -> False
|
||||||
StringLit _ -> False
|
StringLit _ -> False
|
||||||
Call n ts -> List.any (occurs vars us) ts
|
Call n ts -> List.any (occurs vars us) ts
|
||||||
Var (MkUnificationVar v) -> if Set.member v vars then True else
|
Var (MkUnificationVar v) -> if Set.member v vars then True else
|
||||||
|
@ -180,6 +185,7 @@ unify : Term UnificationVar -> Term UnificationVar -> UnificationState -> Maybe
|
||||||
unify t1 t2 us =
|
unify t1 t2 us =
|
||||||
case (t1, t2) of
|
case (t1, t2) of
|
||||||
(IntLit i1, IntLit i2) -> if i1 == i2 then Just (t1, us) else Nothing
|
(IntLit i1, IntLit i2) -> if i1 == i2 then Just (t1, us) else Nothing
|
||||||
|
(FloatLit f1, FloatLit f2) -> if f1 == f2 then Just (t1, us) else Nothing
|
||||||
(StringLit s1, StringLit s2) -> if s1 == s2 then Just (t1, us) else Nothing
|
(StringLit s1, StringLit s2) -> if s1 == s2 then Just (t1, us) else Nothing
|
||||||
(Call n1 ts1, Call n2 ts2) ->
|
(Call n1 ts1, Call n2 ts2) ->
|
||||||
if n1 == n2
|
if n1 == n2
|
||||||
|
@ -196,6 +202,7 @@ reify : Term UnificationVar -> UnificationState -> Term UnificationVar
|
||||||
reify t us =
|
reify t us =
|
||||||
case t of
|
case t of
|
||||||
IntLit i -> IntLit i
|
IntLit i -> IntLit i
|
||||||
|
FloatLit f -> FloatLit f
|
||||||
StringLit s -> StringLit s
|
StringLit s -> StringLit s
|
||||||
Call n ts -> Call n (List.map (\tp -> reify tp us) ts)
|
Call n ts -> Call n (List.map (\tp -> reify tp us) ts)
|
||||||
Var v ->
|
Var v ->
|
||||||
|
|
Loading…
Reference in New Issue
Block a user