Commit cf45fb42 authored by André Pacak's avatar André Pacak

remove pair/prod because it is not needed for sums

parent 06a48087
......@@ -39,10 +39,6 @@ matchFun :: Type -> String -> Infer (Type, Type)
matchFun (Fun ty1 ty2) _ = return (ty1, ty2)
matchFun ty err = fail $ funError ty err
matchProd :: Type -> String -> Infer (Type, Type)
matchProd (Prod ty1 ty2) _ = return (ty1, ty2)
matchProd ty err = fail $ prodError ty err
matchType :: Type -> Type -> String -> Check
matchType ty1 ty2 _
| ty1 == ty2 = return ()
......@@ -83,24 +79,12 @@ inferType ctx (App t1 t2 _) = do
(ty1, ty2) <- matchFun ty (show t1)
checkType ctx t2 ty1
return ty2
inferType ctx (Fst t _) = do
ty <- inferType ctx t
(ty1, _) <- matchProd ty (show t)
return ty1
inferType ctx (Snd t _) = do
ty <- inferType ctx t
(_, ty2) <- matchProd ty (show t)
return ty2
inferType _ t = fail $ "Cannot infer type of term " ++ show t
checkType :: Ctx -> Term -> Type -> Check
checkType ctx p@(Lam name t _) ty = do
(ty1, ty2) <- matchFun ty (show p)
checkType (Bind ctx name ty1) t ty2
checkType ctx p@(Pair t1 t2 _) ty = do
(ty1, ty2) <- matchProd ty (show p)
checkType ctx t1 ty1
checkType ctx t2 ty2
checkType ctx p@(InL t _) ty = do
(ty1, ty2) <- matchSum ty (show p)
checkType ctx t ty1
......
......@@ -77,10 +77,6 @@ matchFun :: Type -> String -> Infer (Type, Type)
matchFun (Fun ty1 ty2) _ = return (ty1, ty2)
matchFun ty err = fail [funError ty err]
matchProd :: Type -> String -> Infer (Type, Type)
matchProd (Prod ty1 ty2) _ = return (ty1, ty2)
matchProd ty err = fail [prodError ty err]
matchType :: Type -> Type -> String -> Check
matchType ty1 ty2 _ | ty1 >= ty2 = return ()
matchType ty1 ty2 err = fail [generalError (show ty1) ty2 err]
......@@ -119,24 +115,12 @@ inferType ctx (App t1 t2 _) = do
(ty1, ty2) <- matchFun ty (show t1)
checkType ctx t2 ty1
return ty2
inferType ctx (Fst t _) = do
ty <- inferType ctx t
(ty1, _) <- matchProd ty (show t)
return ty1
inferType ctx (Snd t _) = do
ty <- inferType ctx t
(_, ty2) <- matchProd ty (show t)
return ty2
inferType _ t = fail ["Cannot infer type of term " ++ show t]
checkType :: Ctx -> Term -> Type -> Check
checkType ctx p@(Lam name t _) ty = do
(ty1, ty2) <- matchFun ty (show p)
checkType(Bind ctx name ty1) t ty2
checkType ctx p@(Pair t1 t2 _) ty = do
(ty1, ty2) <- matchProd ty (show p)
checkType ctx t1 ty1
checkType ctx t2 ty2
checkType ctx p@(InL t _) ty = do
(ty1, ty2) <- matchSum ty (show p)
checkType ctx t ty1
......
......@@ -77,10 +77,6 @@ matchFun :: Type -> String -> Infer (Type, Type)
matchFun (Fun ty1 ty2) _ = Inferred (ty1, ty2)
matchFun ty err = NotInferred [funError ty err]
matchProd :: Type -> String -> Infer (Type, Type)
matchProd (Prod ty1 ty2) _ = Inferred (ty1, ty2)
matchProd ty err = NotInferred [prodError ty err]
matchType :: Type -> Type -> String -> Check
matchType ty1 ty2 _ | ty1 >= ty2 = Inferred ()
matchType ty1 ty2 err = NotInferred [generalError (show ty1) ty2 err]
......@@ -121,10 +117,6 @@ lookup t x = case parent t of
lookup p x
Just p@(App t1 t2 _) | t == t2 -> do
lookup p x
Just p@(Fst t _) -> do
lookup p x
Just p@(Snd t _) -> do
lookup p x
Just p@(Lam name term _) ->
if name == x
then do
......@@ -132,10 +124,6 @@ lookup t x = case parent t of
(ty1, ty2) <- matchFun ty (show p)
return ty1
else lookup p x
Just p@(Pair t1 t2 _) | t == t1 -> do
lookup p x
Just p@(Pair t1 t2 _) | t == t2 -> do
lookup p x
Just p@(InL term _) -> do
lookup p x
Just p@(InR term _) -> do
......@@ -183,14 +171,6 @@ inferType (App t1 t2 _) = do
(ty1, ty2) <- matchFun ty (show t1)
checkType t2
return ty2
inferType (Fst t _) = do
ty <- inferType t
(ty1, _) <- matchProd ty (show t)
return ty1
inferType (Snd t _) = do
ty <- inferType t
(_, ty2) <- matchProd ty (show t)
return ty2
inferType t = fail ["Cannot infer type of term " ++ show t]
checkType :: Term -> Check
......@@ -198,11 +178,6 @@ checkType p@(Lam name t _) = do
ty <- requiredType p
(ty1, ty2) <- matchFun ty (show p)
checkType t
checkType p@(Pair t1 t2 _) = do
ty <- requiredType p
(ty1, ty2) <- matchProd ty (show p)
checkType t1
checkType t2
checkType p@(InL t _) = do
ty <- requiredType p
(ty1, ty2) <- matchSum ty (show p)
......@@ -242,14 +217,6 @@ requiredType t = case parent t of
ty <- requiredType p
(ty1, ty2) <- matchFun ty (show p)
return ty2
Just p@(Pair t1 t2 _) | t == t1 -> do
ty <- requiredType p
(ty1, ty2) <- matchProd ty (show p)
return ty1
Just p@(Pair t1 t2 _) | t == t2 -> do
ty <- requiredType p
(ty1, ty2) <- matchProd ty (show p)
return ty2
Just p@(InL term _) | t == term -> do
ty <- requiredType p
(ty1, ty2) <- matchSum ty (show p)
......
......@@ -76,10 +76,6 @@ matchFun :: Type -> String -> Infer (Type, Type)
matchFun (Fun ty1 ty2) _ = return (ty1, ty2)
matchFun ty err = fail [funError ty err]
matchProd :: Type -> String -> Infer (Type, Type)
matchProd (Prod ty1 ty2) _ = return (ty1, ty2)
matchProd ty err = fail [prodError ty err]
matchSum :: Type -> String -> Infer (Type, Type)
matchSum (Sum ty1 ty2) _ = return (ty1, ty2)
matchSum ty err = fail [sumError ty err]
......@@ -118,14 +114,6 @@ inferType ctx (App t1 t2 _) = do
(ty1, ty2) <- matchFun ty (show t1)
checkType ctx t2
return ty2
inferType ctx (Fst t _) = do
ty <- inferType ctx t
(ty1, _) <- matchProd ty (show t)
return ty1
inferType ctx (Snd t _) = do
ty <- inferType ctx t
(_, ty2) <- matchProd ty (show t)
return ty2
inferType _ t = fail ["Cannot infer type of term " ++ show t]
checkType :: Ctx -> Term -> Check
......@@ -134,11 +122,6 @@ checkType ctx p@(Lam name t _) = do
(ty1, ty2) <- matchFun ty (show p)
let ctx' = (Bind ctx name ty1)
checkType ctx' t
checkType ctx p@(Pair t1 t2 _) = do
ty <- requiredType ctx p
(ty1, ty2) <- matchProd ty (show p)
checkType ctx t1
checkType ctx t2
checkType ctx p@(InL t _) = do
ty <- requiredType ctx p
(ty1, ty2) <- matchSum ty (show p)
......@@ -180,14 +163,6 @@ requiredType ctx t = case parent t of
ty <- requiredType ctx' p
(ty1, ty2) <- matchFun ty (show p)
return ty2
Just p@(Pair t1 t2 _) | t == t1 -> do
ty <- requiredType ctx p
(ty1, ty2) <- matchProd ty (show p)
return ty1
Just p@(Pair t1 t2 _) | t == t2 -> do
ty <- requiredType ctx p
(ty1, ty2) <- matchProd ty (show p)
return ty2
Just p@(InL term _) | t == term -> do
ty <- requiredType ctx p
(ty1, ty2) <- matchSum ty (show p)
......
......@@ -36,10 +36,6 @@ matchFun :: Type -> String -> Infer (Type, Type)
matchFun (Fun ty1 ty2) _ = return (ty1, ty2)
matchFun ty err = fail $ funError ty err
matchProd :: Type -> String -> Infer (Type, Type)
matchProd (Prod ty1 ty2) _ = return (ty1, ty2)
matchProd ty err = fail $ prodError ty err
matchType :: Type -> Type -> String -> Check
matchType ty1 ty2 _ | ty1 == ty2 = return ()
matchType ty1 ty2 err = fail $ generalError (show ty1) ty2 err
......@@ -78,24 +74,12 @@ inferType ctx (App t1 t2 _) = do
(ty1, ty2) <- matchFun ty (show t1)
checkType ctx t2 ty1
return ty2
inferType ctx (Fst t _) = do
ty <- inferType ctx t
(ty1, _) <- matchProd ty (show t)
return ty1
inferType ctx (Snd t _) = do
ty <- inferType ctx t
(_, ty2) <- matchProd ty (show t)
return ty2
inferType _ t = fail $ "Cannot infer type of term " ++ show t
checkType :: Ctx -> Term -> Type -> Check
checkType ctx p@(Lam name t _) ty = do
(ty1, ty2) <- matchFun ty (show p)
checkType(Bind ctx name ty1) t ty2
checkType ctx p@(Pair t1 t2 _) ty = do
(ty1, ty2) <- matchProd ty (show p)
checkType ctx t1 ty1
checkType ctx t2 ty2
checkType ctx p@(InL t _) ty = do
(ty1, ty2) <- matchSum ty (show p)
checkType ctx t ty1
......
......@@ -16,10 +16,6 @@ data Term =
Succ Term Parent |
Add Term Term Parent |
Mult Term Term Parent |
-- pair constructs
Pair Term Term Parent |
Fst Term Parent |
Snd Term Parent |
-- let binding
Let Name Term Term Parent |
-- sum types
......@@ -36,9 +32,6 @@ instance Eq Term where
(Succ t _) == (Succ t' _) = t == t'
(Add t1 t2 _) == (Add t1' t2' _) = t1 == t1' && t2 == t2'
(Mult t1 t2 _) == (Mult t1' t2' _) = t1 == t1' && t2 == t2'
(Pair t1 t2 _) == (Pair t1' t2' _) = t1 == t1' && t2 == t2'
(Fst t _) == (Fst t' _) = t == t'
(Snd t _) == (Snd t' _) = t == t'
(Let n t1 t2 _) == (Let n' t1' t2' _) = n == n' && t1 == t1' && t2 == t2'
(InL t _) == (InL t' _) = t == t'
(InR t _) == (InR t' _) = t == t'
......@@ -56,9 +49,6 @@ parent (Zero p) = p
parent (Succ _ p) = p
parent (Add _ _ p) = p
parent (Mult _ _ p) = p
parent (Pair _ _ p) = p
parent (Fst _ p) = p
parent (Snd _ p) = p
parent (Let _ _ _ p) = p
parent (InL _ p) = p
parent (InR _ p) = p
......@@ -93,9 +83,6 @@ succ = cons1 Succ
add = cons2 Add
mult = cons2 Mult
pair = cons2 Pair
fst' = cons1 Fst
snd' = cons1 Snd
let' n = cons2 (Let n)
......@@ -120,21 +107,17 @@ instance Show Term where
showsPrec p (Add l r _) = showString "Add " . showsPrec (p + 1) l . showString " " . showsPrec (p + 1) r
showsPrec p (Mult l r _) = showString "Mult " . showsPrec (p + 1) l . showString " " . showsPrec (p + 1) r
showsPrec p (Pair l r _) = showString "{" . showsPrec (p + 1) l . showString ", ". showsPrec (p + 1) r . showString "}"
showsPrec p (Fst e _) = showsPrec (p + 1) e . showString ".1"
showsPrec p (Snd e _) = showsPrec (p + 1) e . showString ".2"
showsPrec p (Let n e b _) =
showString "let " . showString n . showString " = " . showsPrec (p + 1) e . showString " in " . showsPrec (p + 1) b
showsPrec p (InL t _) = showString "InL " . showsPrec (p + 1) t
showsPrec p (InR t _) = showString "InR " . showsPrec (p + 1) t
data Type = Nat | Fun Type Type | Prod Type Type | Sum Type Type | AnyType
data Type = Nat | Fun Type Type | Sum Type Type | AnyType
deriving (Show, Eq)
instance PO.PartialOrd Type where
_ <= AnyType = True
(Fun t1 t2) <= (Fun u1 u2) = t1 <= u1 && t2 <= u2
(Prod t1 t2) <= (Prod u1 u2) = t1 <= u1 && t2 <= u2
(Sum t1 t2) <= (Sum u1 u2) = t1 <= u1 && t2 <= u2
ty1 <= ty2 = ty1 == ty2
......
......@@ -31,12 +31,6 @@ sharedSpec inferType = do
let res = convert $ inferType tOkArithmetic in res `shouldBe` B.Inferred Nat
it "should infer let binding with arithmetic expression to be of type Nat" $ do
let res = convert $ inferType tOkLetBindingWithArith in res `shouldBe` B.Inferred Nat
it "should infer expression to be of type (Prod Nat (Prod Nat Nat))" $ do
let res = convert $ inferType tOkProd in res `shouldBe` B.Inferred (Prod Nat (Prod Nat Nat))
it "should infer projection for first element to be of type Nat" $ do
let res = convert $ inferType tOkProjection1 in res `shouldBe` B.Inferred Nat
it "should infer projection for second element to be of type (Prod Nat Nat)" $ do
let res = convert $ inferType tOkProjection2 in res `shouldBe` B.Inferred (Prod Nat Nat)
it "should infer nested lambda expressions" $ do
let res = convert $ inferType tOkAppLambdaAnno in res `shouldBe` B.Inferred Nat
it "should infer annotated lambda to be of type (Fun Nat Nat)" $ do
......@@ -45,14 +39,10 @@ sharedSpec inferType = do
let res = convert $ inferType tOkAnno in res `shouldBe` B.Inferred (Fun (Fun Nat Nat) (Fun (Fun Nat Nat) (Fun Nat Nat)))
it "should infer let binding with annotation in named expression" $ do
let res = convert $ inferType tOkAnnoInBindingLet in res `shouldBe` B.Inferred Nat
it "should infer let binding in pair(fst)" $ do
let res = convert $ inferType tOkLetInPairFst in res `shouldBe` B.Inferred (Prod Nat (Fun Nat Nat))
it "should infer let binding in pair(snd)" $ do
let res = convert $ inferType tOkLetInPairSnd in res `shouldBe` B.Inferred (Prod (Fun Nat Nat) Nat)
it "should infer left injection " $ do
let res = convert $ inferType tOkInL in res `shouldBe` B.Inferred (Sum Nat (Fun Nat Nat))
it "should infer right injection " $ do
let res = convert $ inferType tOkInR in res `shouldBe` B.Inferred (Sum Nat (Prod Nat (Fun Nat Nat)))
let res = convert $ inferType tOkInR in res `shouldBe` B.Inferred (Sum Nat (Fun Nat Nat))
it "should infer case for left injection " $ do
let res = convert $ inferType tOkCaseLeft in res `shouldBe` B.Inferred Nat
it "should infer case for right injection " $ do
......@@ -64,18 +54,8 @@ sharedSpec inferType = do
let res = isInferred $ convert $ inferType tFailArithmetic in res `shouldBe` False
it "should fail while inferring an application of a lambda expression without type annotation" $ do
let res = isInferred $ convert $ inferType tFailLambdaNoAnno in res `shouldBe` False
it "should fail while inferring an add expression that has a product as an argument" $ do
let res = isInferred $ convert $ inferType tFailProdInAdd in res `shouldBe` False
it "should fail while trying to infer an annotated expression that should be of type Nat but is (Prod Nat Nat)" $ do
let res = isInferred $ convert $ inferType tFailLambdaInProd in res `shouldBe` False
it "should fail while trying to infer a projection on a Nat type" $ do
let res = isInferred $ convert $ inferType tFailProjectionOnNat in res `shouldBe` False
it "should fail while trying to infer a let binding without annotation of lambda in named expression" $ do
let res = isInferred $ convert $ inferType tFailLambdaNotAnnoInBindingLet in res `shouldBe` False
it "should fail while inferering let binding in pair(fst)" $ do
let res = isInferred $ convert $ inferType tFailLetInPairFst in res `shouldBe` False
it "should fail while infering let binding in pair(snd)" $ do
let res = isInferred $ convert $ inferType tFailLetInPairSnd in res `shouldBe` False
it "should fail while infering left injection" $ do
let res = isInferred $ convert $ inferType tFailInL in res `shouldBe` False
it "should fail while infering right injection" $ do
......
......@@ -8,33 +8,22 @@ tOkZero = root zero
tOkSucc = root $ succ $ succ zero
tOkArithmetic = root $ (add (succ $ succ zero) (mult zero (succ $ succ $ succ $ succ zero)))
tOkLetBindingWithArith = root $ (let' "x" (add zero (succ zero)) (mult (var "x") (succ $ succ zero)))
tOkProd = root $ (anno (Prod Nat (Prod Nat Nat)) (pair (succ $ succ zero) (pair zero (succ zero))))
tOkProjection1 = root $ fst' (anno (Prod Nat Nat) (pair (mult zero zero) (add (succ zero) zero)))
tOkProjection2 = root $ snd' (anno (Prod Nat (Prod Nat Nat)) (pair (succ $ succ zero) (pair zero (succ zero))))
tOkAnno = root $ (anno (Fun (Fun Nat Nat) (Fun (Fun Nat Nat) (Fun Nat Nat))) (lam "f" $ lam "g" $ lam "b" (app (var "g") (app (var "f") (var "b")))))
tOkLambdaAnno = root $ (anno (Fun Nat Nat) (lam "a" (add (var "a") zero)))
tOkAppLambdaAnno = root $ (app (anno (Fun Nat Nat) (lam "b" (add (var "b") zero))) (succ $ succ zero))
tOkAnnoInBindingLet = root $ (let' "e" (anno Nat (add zero (succ zero))) (mult (var "e") (succ zero)))
tOkLetInPairFst = root $ (anno (Prod Nat (Fun Nat Nat)) (pair (let' "e" zero (succ $ succ (var "e"))) (lam "a" (succ (var "a")))))
tOkLetInPairSnd = root $ (anno (Prod (Fun Nat Nat) Nat) (pair (lam "n" (var "n")) (let' "e" zero (succ $ succ (var "e")))))
tOkInL = root $ (anno (Sum Nat (Fun Nat Nat)) (inl $ succ zero))
tOkInR = root $ (anno (Sum Nat (Prod Nat (Fun Nat Nat))) (inr (pair (succ $ succ zero) (anno (Fun Nat Nat) (lam "b" zero)))))
tOkCaseLeft = root $ (anno Nat (case' (anno (Sum Nat (Prod Nat Nat)) (inl $ succ zero)) "a" (var "a") "b" zero))
tOkInR = root $ (anno (Sum Nat (Fun Nat Nat)) (inr (anno (Fun Nat Nat) (lam "b" zero))))
tOkCaseLeft = root $ (anno Nat (case' (anno (Sum Nat Nat) (inl $ zero)) "a" (var "a") "b" zero))
tOkCaseRight = root $ (anno Nat (case' (anno (Sum Nat (Fun Nat Nat)) (inr $ lam "x" $ add zero $ var "x")) "a" zero "b" (app (var "b") (succ $ succ zero))))
tOkCaseLeftShadowBinding = root $ (let' "a" zero (anno Nat (case' (anno (Sum (Fun Nat Nat) Nat) (inl $ lam "x" zero)) "a" (app (var "a") zero) "b" (var "a"))))
tFailArithmetic = root $ (add (succ $ succ zero) (mult (anno (Fun Nat Nat) (lam "f" (var "f"))) (succ $ succ $ succ $ succ zero)))
tFailLambdaNoAnno = root $ (anno Nat (app (lam "b" (add (var "b") zero)) (succ $ succ zero)))
tFailProdInAdd = root $ (anno Nat (add (anno (Prod Nat Nat) (pair zero zero)) zero))
tFailLambdaInProd = root $ (anno Nat (snd' (anno (Prod Nat Nat) (pair (anno (Fun Nat Nat) (lam "a" (var "a"))) zero))))
tFailProjectionOnNat = root $ snd' $ succ $ succ zero
tFailLambdaNotAnnoInBindingLet = root $ (let' "e" (lam "n" (add (var "n") (succ zero))) (mult (app (var "e") zero) (succ zero)))
tFailLetInPairFst = root $ (anno (Prod (Fun Nat Nat) (Fun Nat Nat)) (pair (let' "e" zero $ succ $ succ $ var "e") (lam "a" $ succ $ var "a")))
tFailLetInPairSnd = root $ (anno (Prod Nat (Fun Nat Nat)) (pair (lam "n" $ var "n") (let' "e" zero $ succ $ succ $ var "e")))
tFailInL = root $ (anno (Sum Nat Nat) (inl (pair zero zero)))
tFailInL = root $ (anno (Sum Nat Nat) (inl (lam "b" zero)))
tFailInR = root $ (anno (Sum Nat Nat) (inr (lam "x" $ var "x")))
tFailCaseUnequalReturnTypes = root $ (anno (Prod Nat Nat) (case' (anno Nat (inl $ succ $ succ zero)) "a" (pair zero zero) "b" zero))
tFailCaseUnequalReturnTypes = root $ (anno (Fun Nat Nat) (case' (anno Nat (inl $ succ $ succ zero)) "a" (lam "x" (add (var "a") zero)) "b" zero))
tFailCaseRightShadowBinding = root $ (let' "a" zero (anno Nat (case' (anno (Sum Nat (Fun Nat Nat)) (inr $ lam "x" zero)) "a" zero "b" (var "b"))))
......@@ -7,22 +7,14 @@
</component>
<component name="ChangeListManager">
<list default="true" id="676692ec-cd16-4102-9017-0f40d5cf3cc0" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.mps/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.mps/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/languages/NewLanguage/models/editor.mps" beforeDir="false" afterPath="$PROJECT_DIR$/languages/NewLanguage/models/editor.mps" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/Base.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/Base.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/ContinueAfterCheckFail.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/ContinueAfterCheckFail.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/EliminateContextArgument.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/EliminateContextArgument.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/EliminateTypeArgumentOfCheck.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/EliminateTypeArgumentOfCheck.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/ErrorList.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/ErrorList.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/Language.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../src/SumTypes/Language.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../src/ExtendedTLC/PartialOrd.hs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/BaseSpec.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/BaseSpec.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/EliminateContextArgumentSpec.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/EliminateContextArgumentSpec.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/EliminateTypeArgumentOfCheckSpec.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/EliminateTypeArgumentOfCheckSpec.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/EqualOutputSharedSpecs.hs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/ErrorListSpec.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/ErrorListSpec.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/SharedSpecs.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/SharedSpecs.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../test/ExtendedTLC/TestCases.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../test/SumTypes/TestCases.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/Base.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/Base.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/ContinueAfterCheckFail.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/ContinueAfterCheckFail.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/EliminateContextArgument.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/EliminateContextArgument.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/EliminateTypeArgumentOfCheck.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/EliminateTypeArgumentOfCheck.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/ErrorList.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/ErrorList.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../haskell/src/SumTypes/Language.hs" beforeDir="false" afterPath="$PROJECT_DIR$/../haskell/src/SumTypes/Language.hs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/solutions/SumTypes_Checker/models/test.fail_case_right_shadow.mps" beforeDir="false" afterPath="$PROJECT_DIR$/solutions/SumTypes_Checker/models/test.fail_case_right_shadow.mps" afterDir="false" />
<change beforePath="$PROJECT_DIR$/solutions/SumTypes_Checker/models/test.fail_case_unequal_return_types.mps" beforeDir="false" afterPath="$PROJECT_DIR$/solutions/SumTypes_Checker/models/test.fail_case_unequal_return_types.mps" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
......@@ -93,33 +85,27 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.model/Typing">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.ok_case_left/TestOkCaseLeft">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="1087">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="220" />
<property name="caretXRelative" value="6" />
<property name="caretX" value="15" />
<property name="caretXRelative" value="0" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="Constant_630h0h_c0">
<node node_reference="r:7f6445f1-fd3e-4963-8d4e-6aee490660f0(SumTypes_Checker.model)/6183728743525917388" />
<cellInfo cellId="empty_imports">
<node node_reference="r:df467971-2eb9-4bab-83a9-e57214a25281(SumTypes_Checker.test.ok_case_left)/7797870059173322201" />
</cellInfo>
</stackElement>
</selectionStack>
<errorMarkers />
<transactionalProperties />
<foldable>
<collapsedElement isCollapsed="false">
<cellIdElement cellId="refNodeList_imports">
<node node_reference="r:7f6445f1-fd3e-4963-8d4e-6aee490660f0(SumTypes_Checker.model)/7775541183377643823" />
</cellIdElement>
</collapsedElement>
</foldable>
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:0568d2ce-ce69-49aa-8176-238e55a72c80(SumTypes.editor)/7315585726624087688" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
......@@ -135,18 +121,18 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.ok_case_left/TestOkCaseLeft">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.fail_inl/TestFailInL">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="15" />
<property name="caretX" value="57" />
<property name="caretXRelative" value="0" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="empty_imports">
<node node_reference="r:df467971-2eb9-4bab-83a9-e57214a25281(SumTypes_Checker.test.ok_case_left)/7797870059173322201" />
<cellInfo cellId="property_name">
<node node_reference="r:999b4f81-8f6e-460d-b975-70793e2b62e2(SumTypes_Checker.test.fail_inl)/7797870059173322557" />
</cellInfo>
</stackElement>
</selectionStack>
......@@ -155,7 +141,7 @@
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:0568d2ce-ce69-49aa-8176-238e55a72c80(SumTypes.editor)/7315585726624087688" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
......@@ -171,18 +157,18 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.ok_case_right/TestOkCaseRight">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.fail_case_unequal_return_types/TestFailCaseUnequalReturnTypes">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<memento saveSessionState="false" viewPositionX="26" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="165" />
<property name="caretXRelative" value="0" />
<property name="caretX" value="261" />
<property name="caretXRelative" value="6" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="Constant_1ldesa_c0">
<node node_reference="r:4874477a-7d63-48bb-83c6-81457814a615(SumTypes_Checker.test.ok_case_right)/9087015563867261517" />
<cellInfo cellId="Constant_87dhgu_f0">
<node node_reference="r:c08eeb92-770b-4871-9ce9-e89a2e0399d7(SumTypes_Checker.test.fail_case_unequal_return_types)/9087015563867265089" />
</cellInfo>
</stackElement>
</selectionStack>
......@@ -191,7 +177,7 @@
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:0568d2ce-ce69-49aa-8176-238e55a72c80(SumTypes.editor)/7315585726624087688" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
......@@ -207,6 +193,78 @@
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.fail_case_right_shadow/TestFailCaseRightShadow">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="80" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="513" />
<property name="caretXRelative" value="6" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="property_name">
<node node_reference="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" />
</cellInfo>
</stackElement>
</selectionStack>
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
<enabledHints>
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor_doNotUseThisHint" />
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor" />
</enabledHints>
</inspectorMemento>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.fail_arithmetic/TestFailArithmetic">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="213" />
<property name="caretXRelative" value="6" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="property_name">
<node node_reference="r:ec651532-5c8d-4b2f-8038-8d287d9e0290(SumTypes_Checker.test.fail_arithmetic)/9087015563867262737" />
</cellInfo>
</stackElement>
</selectionStack>
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
<enabledHints>
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor_doNotUseThisHint" />
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor" />
</enabledHints>
</inspectorMemento>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes/SumTypes.structure/Case">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.tabs.TabbedEditor$TabbedEditorState">
......@@ -227,7 +285,7 @@
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:0568d2ce-ce69-49aa-8176-238e55a72c80(SumTypes.editor)/7315585726624087688" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
......@@ -243,6 +301,78 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.ok_inl/TestOkInL">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="57" />
<property name="caretXRelative" value="0" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="property_name">
<node node_reference="r:c63cc1d5-dea2-4fd8-878d-1cd3c127f487(SumTypes_Checker.test.ok_inl)/7797870059173322088" />
</cellInfo>
</stackElement>
</selectionStack>
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
<enabledHints>
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor_doNotUseThisHint" />
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor" />
</enabledHints>
</inspectorMemento>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://SumTypes_Checker/SumTypes_Checker.test.ok_inr/TestOkInR">
<provider selected="true" editor-type-id="MPSFileEditor">
<state class="jetbrains.mps.ide.editor.BaseNodeEditor$BaseEditorState">
<memento saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack>
<stackElement className="jetbrains.mps.nodeEditor.selection.EditorCellLabelSelection">
<property name="hasNonTrivialSelection" value="false" />
<property name="caretX" value="57" />
<property name="caretXRelative" value="0" />
<property name="sideSelectDirection" value="NONE" />
<cellInfo cellId="property_name">
<node node_reference="r:d31d5b14-c99f-44e3-bf3c-bff6e95a4dfb(SumTypes_Checker.test.ok_inr)/7797870059173322122" />
</cellInfo>
</stackElement>
</selectionStack>
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
</memento>
<inspectorMemento currentlyEditedNode="r:621e245e-6257-4f76-815c-cf1196b979d2(SumTypes_Checker.test.fail_case_right_shadow)/5743422457467279726" saveSessionState="false" viewPositionX="0" viewPositionY="0">
<selectionStack />
<errorMarkers />
<transactionalProperties />
<foldable />
<restoreAlways />
<enabledHints>
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor_doNotUseThisHint" />
<enabledHintsElement enabledHintsAttribute="de.slisson.mps.conditionalEditor.hints.editor.conditionalEditorHints.conditionalEditor" />
</enabledHints>
</inspectorMemento>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="mps://node://jetbrains.mps.lang.editor/jetbrains.mps.lang.editor.structure/CellModel_Property">
<provider selected="true" editor-type-id="MPSFileEditor">
......@@ -264,7 +394,7 @@
<foldable />