diff --git a/.snapshots/should_fail_for_abstractions_with_a_wrong_type_definition/golden b/.snapshots/should_fail_for_abstractions_with_a_wrong_type_definition/golden index 68ba784f5..94ac0ced5 100644 --- a/.snapshots/should_fail_for_abstractions_with_a_wrong_type_definition/golden +++ b/.snapshots/should_fail_for_abstractions_with_a_wrong_type_definition/golden @@ -9,47 +9,145 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 1 1) (Loc 58 2 24)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 35 2 1) (Loc 58 2 24)) (Assignment "fn" (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 40 2 6) (Loc 58 2 24)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) (Area (Loc 41 2 7) (Loc 42 2 8)) "a") + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 41 2 7) (Loc 42 2 8)) + "a") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 40 2 6) (Loc 58 2 24)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 44 2 10) (Loc 45 2 11)) "b") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TCon (TC "Boolean" Star) "prelude") (Area (Loc 51 2 17) (Loc 57 2 23)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 51 2 17) (Loc 57 2 23)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 53 2 19) (Loc 55 2 21)) (Var "==" False)) (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 51 2 17) (Loc 52 2 18)) (Var "a" False)) False)) (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 53 2 19) (Loc 55 2 21))) + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 56 2 22) (Loc 57 2 23)) (Var "b" False)) True) diff --git a/.snapshots/should_fail_to_infer_an_if_else_expression_if_the_condition_is_not_a_Boolean/golden b/.snapshots/should_fail_to_infer_an_if_else_expression_if_the_condition_is_not_a_Boolean/golden index c3071fec0..63dc1b4c8 100644 --- a/.snapshots/should_fail_to_infer_an_if_else_expression_if_the_condition_is_not_a_Boolean/golden +++ b/.snapshots/should_fail_to_infer_an_if_else_expression_if_the_condition_is_not_a_Boolean/golden @@ -9,22 +9,48 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 0 1 1) (Loc 71 8 2)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 0 1 1) (Loc 71 8 2)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 7 1 8) (Loc 71 8 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) (Area (Loc 70 8 1) (Loc 70 8 1)) "_") + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) + (Area (Loc 70 8 1) (Loc 70 8 1)) + "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 17 2 3) (Loc 69 7 4)) (If (Typed diff --git a/.snapshots/should_fail_to_infer_applications_when_a_variable_is_used_with_different_types/golden b/.snapshots/should_fail_to_infer_applications_when_a_variable_is_used_with_different_types/golden index e2e745fa8..a5b6c621f 100644 --- a/.snapshots/should_fail_to_infer_applications_when_a_variable_is_used_with_different_types/golden +++ b/.snapshots/should_fail_to_infer_applications_when_a_variable_is_used_with_different_types/golden @@ -975,128 +975,1797 @@ (LNum "3")) True))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))))))) (Area (Loc 765 40 1) (Loc 1082 52 2)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))))))) (Area (Loc 803 41 1) (Loc 1082 52 2)) (Assignment "toggleTodo" (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon + (TC "Wish" (Kfun Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ])))))))) (Area (Loc 816 41 14) (Loc 1082 52 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 817 41 15) (Loc 822 41 20)) "index") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon + (TC "Wish" (Kfun Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]))))))) (Area (Loc 816 41 14) (Loc 1082 52 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TRecord + (fromList + [ ( "input" , TCon (TC "String" Star) "prelude" ) + , ( "todos" + , TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])) (Area (Loc 824 41 22) (Loc 825 41 23)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon + (TC "Wish" (Kfun Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC + "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon (TC "Todo" Star) "Module.mad") + ) + ])))))) (Area (Loc 816 41 14) (Loc 1082 52 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 827 41 25) (Loc 829 41 27)) "__") [ Typed - ([] :=> TVar (TV (-1) Star)) - (Area (Loc 834 41 32) (Loc 1082 52 2)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TApp + (TApp + (TCon + (TC "Wish" (Kfun Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC "List" (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]))))) + (Area (Loc 834 41 32) (Loc 1082 52 2)) (ListConstructor [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "Wish" + (Kfun Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ])))) (Area (Loc 838 42 3) (Loc 1080 51 12)) (ListItem (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "Wish" + (Kfun + Star (Kfun Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ])))) (Area (Loc 838 42 3) (Loc 1080 51 12)) (App (Typed - ([] :=> TVar (TV (-1) Star)) - (Area (Loc 838 42 3) (Loc 840 42 5)) - (Var "of" False)) - (Typed - ([] :=> TVar (TV (-1) Star)) - (Area - (Loc 841 42 6) (Loc 1079 51 11)) - (Abs - (Typed - ([] :=> TVar (TV (-1) Star)) - (Area - (Loc 842 42 7) - (Loc 847 42 12)) - "state") - [ Typed - ([] :=> TVar (TV (-1) Star)) - (Area - (Loc 852 42 17) - (Loc 1079 51 11)) - (App - (Typed - ([] :=> - TVar (TV (-1) Star)) - (Area - (Loc 852 42 17) - (Loc 1072 51 4)) - (Abs - (Typed - ([] :=> - TVar - (TV - (-1) - Star)) - (Area - (Loc - 852 42 17) - (Loc - 855 42 20)) - "__P__2") - [ Typed - ([] :=> - TVar - (TV - (-1) - Star)) - (Area - (Loc - 852 42 17) - (Loc - 1068 - 50 - 7)) - (App - (Typed - ([] :=> - TVar - (TV - (-1) - Star)) - (Area - (Loc - 983 - 47 - 5) - (Loc - 1068 - 50 - 7)) - (Abs - (Typed - ([] :=> - TVar - (TV - (-1) - Star)) - (Area - (Loc + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])))) + (TApp + (TApp + (TCon + (TC + "Wish" + (Kfun + Star + (Kfun + Star Star))) + "Module.mad") + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList []))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList [])))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))))) + (Area (Loc 838 42 3) (Loc 840 42 5)) + (Var "of" False)) + (Typed + ([ IsIn + "Number" + [ TCon + (TC "Integer" Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC "String" Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC "Todo" Star) + "Module.mad") + ) + ]))) + (Area + (Loc 841 42 6) (Loc 1079 51 11)) + (Abs + (Typed + ([ IsIn + "Number" + [ TCon + (TC "Integer" Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) + (Area + (Loc 842 42 7) + (Loc 847 42 12)) + "state") + [ Typed + ([ IsIn + "Number" + [ TCon + (TC "Integer" Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) + (Area + (Loc 852 42 17) + (Loc 1079 51 11)) + (App + (Typed + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (Area + (Loc 852 42 17) + (Loc 1072 51 4)) + (Abs + (Typed + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) + (Area + (Loc + 852 42 17) + (Loc + 855 42 20)) + "__P__2") + [ Typed + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) + (Area + (Loc + 852 42 17) + (Loc + 1068 + 50 + 7)) + (App + (Typed + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (Area + (Loc + 983 + 47 + 5) + (Loc + 1068 + 50 + 7)) + (Abs + (Typed + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TCon + (TC + "Todo" + Star) + "Module.mad") + (Area + (Loc 984 47 6) @@ -1106,11 +2775,59 @@ 13)) "toggled") [ Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 997 @@ -1123,10 +2840,49 @@ (Record [ Typed ([] :=> - TVar - (TV - (-1) - Star)) + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 1005 @@ -1139,10 +2895,49 @@ (FieldSpread (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 1008 @@ -1156,11 +2951,29 @@ "state" False))) , Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 1021 @@ -1173,11 +2986,29 @@ (Field ( "todos" , Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 1028 @@ -1189,11 +3020,53 @@ 46)) (App (Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 1028 @@ -1205,11 +3078,69 @@ 39)) (App (Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Integer" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")))) (Area (Loc 1028 @@ -1222,10 +3153,75 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Integer" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Integer" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))))) (Area (Loc 1028 @@ -1239,11 +3235,21 @@ "slice" False)) (Typed - ([] :=> - TVar - (TV - 0 - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TCon + (TC + "Integer" + Star) + "prelude") (Area (Loc 1034 @@ -1257,11 +3263,21 @@ "0")) False)) (Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TCon + (TC + "Integer" + Star) + "prelude") (Area (Loc 1037 @@ -1274,10 +3290,35 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TCon + (TC + "Integer" + Star) + "prelude")) (Area (Loc 1037 @@ -1292,10 +3333,19 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 1041 @@ -1305,17 +3355,201 @@ 1052 49 38)) - (Var - "state.todos" - False)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) + (Area + (Loc + 1041 + 49 + 27) + (Loc + 1046 + 49 + 32)) + (Var + "state" + False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (Area + (Loc + 1047 + 49 + 33) + (Loc + 1052 + 49 + 38)) + (Var + ".todos" + False)))) True)) False)) (Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 1055 @@ -1333,11 +3567,21 @@ ]) ])) (Typed - ([] :=> - TVar - (TV - (-1) - Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 852 @@ -1350,10 +3594,27 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 926 @@ -1366,10 +3627,11 @@ (Abs (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 0 @@ -1382,10 +3644,11 @@ "__W__3") [ Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 926 @@ -1398,10 +3661,11 @@ (Where (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 0 @@ -1416,10 +3680,27 @@ False)) [ Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 934 @@ -1432,10 +3713,11 @@ (Is (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 934 @@ -1449,10 +3731,11 @@ "Todo" [ Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "String" + Star) + "prelude") (Area (Loc 939 @@ -1466,10 +3749,11 @@ "txt") , Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Boolean" + Star) + "prelude") (Area (Loc 944 @@ -1484,10 +3768,11 @@ ])) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 956 @@ -1500,10 +3785,27 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Boolean" + Star) + "prelude")) + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 956 @@ -1516,10 +3818,43 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "String" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Boolean" + Star) + "prelude")) + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 956 @@ -1531,13 +3866,14 @@ 39)) (Var "Todo" - False)) + True)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "String" + Star) + "prelude") (Area (Loc 961 @@ -1553,10 +3889,11 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Boolean" + Star) + "prelude") (Area (Loc 966 @@ -1569,10 +3906,27 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Boolean" + Star) + "prelude")) + (TCon + (TC + "Boolean" + Star) + "prelude")) (Area (Loc 966 @@ -1587,10 +3941,11 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Boolean" + Star) + "prelude") (Area (Loc 967 @@ -1609,10 +3964,11 @@ ])) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 852 @@ -1625,10 +3981,35 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "Maybe" + (Kfun + Star + Star)) + "Module.mad") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 890 @@ -1641,10 +4022,51 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "Maybe" + (Kfun + Star + Star)) + "Module.mad") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 890 @@ -1659,10 +4081,11 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Todo" + Star) + "Module.mad") (Area (Loc 900 @@ -1675,10 +4098,27 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Boolean" + Star) + "prelude")) + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 900 @@ -1691,10 +4131,43 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "String" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Boolean" + Star) + "prelude")) + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 900 @@ -1706,7 +4179,7 @@ 19)) (Var "Todo" - False)) + True)) (Typed ([] :=> TCon @@ -1748,10 +4221,19 @@ True)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TCon + (TC + "Maybe" + (Kfun + Star + Star)) + "Module.mad") + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 852 @@ -1764,10 +4246,43 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TApp + (TCon + (TC + "Maybe" + (Kfun + Star + Star)) + "Module.mad") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 874 @@ -1780,10 +4295,59 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TCon + (TC + "Integer" + Star) + "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) + (TApp + (TCon + (TC + "Maybe" + (Kfun + Star + Star)) + "Module.mad") + (TCon + (TC + "Todo" + Star) + "Module.mad")))) (Area (Loc 874 @@ -1798,10 +4362,11 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TCon + (TC + "Integer" + Star) + "prelude") (Area (Loc 878 @@ -1817,10 +4382,19 @@ True)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad")) (Area (Loc 852 @@ -1833,10 +4407,73 @@ (App (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]))) + (TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad"))) (Area (Loc 862 @@ -1851,10 +4488,49 @@ False)) (Typed ([] :=> - TVar - (TV - (-1) - Star)) + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 852 @@ -1874,8 +4550,59 @@ True) ])) (Typed - ([] :=> - TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon + (TC + "Integer" + Star) + "prelude" + ] + Nothing + ] :=> + TRecord + (fromList + [ ( "input" + , TCon + (TC + "String" + Star) + "prelude" + ) + , ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ]) + Nothing + (fromList + [ ( "todos" + , TApp + (TCon + (TC + "List" + (Kfun + Star + Star)) + "prelude") + (TCon + (TC + "Todo" + Star) + "Module.mad") + ) + ])) (Area (Loc 1073 51 5) (Loc 1078 51 10)) @@ -1981,218 +4708,863 @@ Nothing (fromList [])))))))))) ] - , atypedecls = + , atypedecls = + [ Untyped + (Area (Loc 556 29 1) (Loc 623 29 68)) + Alias + { aliasname = "Action" + , aliasparams = [ "a" ] + , aliastype = + Untyped + (Area (Loc 580 29 25) (Loc 623 29 68)) + (TRArr + (Untyped (Area (Loc 580 29 25) (Loc 581 29 26)) (TRSingle "a")) + (Untyped + (Area (Loc 585 29 30) (Loc 623 29 68)) + (TRArr + (Untyped + (Area (Loc 585 29 30) (Loc 591 29 36)) (TRSingle "String")) + (Untyped + (Area (Loc 595 29 40) (Loc 623 29 68)) + (TRComp + "List" + [ Untyped + (Area (Loc 601 29 46) (Loc 623 29 68)) + (TRComp + "Wish" + [ Untyped + (Area (Loc 606 29 51) (Loc 614 29 59)) + (TRArr + (Untyped + (Area (Loc 607 29 52) (Loc 608 29 53)) + (TRSingle "a")) + (Untyped + (Area (Loc 612 29 57) (Loc 613 29 58)) + (TRSingle "a"))) + , Untyped + (Area (Loc 606 29 51) (Loc 623 29 68)) + (TRArr + (Untyped + (Area (Loc 616 29 61) (Loc 617 29 62)) + (TRSingle "a")) + (Untyped + (Area (Loc 621 29 66) (Loc 622 29 67)) + (TRSingle "a"))) + ]) + ]))))) + , aliasexported = True + } + , Untyped + (Area (Loc 661 33 1) (Loc 714 33 54)) + Alias + { aliasname = "State" + , aliasparams = [] + , aliastype = + Untyped + (Area (Loc 675 33 15) (Loc 714 33 54)) + (TRRecord + (fromList + [ ( "input" + , ( Area (Loc 677 33 17) (Loc 685 33 25) + , Untyped + (Area (Loc 686 33 26) (Loc 692 33 32)) (TRSingle "String") + ) + ) + , ( "todos" + , ( Area (Loc 694 33 34) (Loc 702 33 42) + , Untyped + (Area (Loc 703 33 43) (Loc 712 33 52)) + (TRComp + "List" + [ Untyped + (Area (Loc 708 33 48) (Loc 712 33 52)) (TRSingle "Todo") + ]) + ) + ) + ]) + Nothing) + , aliasexported = False + } + , Untyped + (Area (Loc 123 11 1) (Loc 155 11 33)) + ADT + { adtname = "Maybe" + , adtparams = [ "a" ] + , adtconstructors = + [ Untyped + (Area (Loc 138 11 16) (Loc 145 11 23)) + (Constructor + "Just" + [ Untyped (Area (Loc 143 11 21) (Loc 144 11 22)) (TRSingle "a") ] + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TVar (TV 274 Star))) + (TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TVar (TV 274 Star))))) + , Untyped + (Area (Loc 148 11 26) (Loc 155 11 33)) + (Constructor + "Nothing" + [] + (TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TVar (TV 275 Star)))) + ] + , adtType = + TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TVar (TV 590647783936702427 Star)) + , adtexported = False + } + , Untyped + (Area (Loc 221 16 1) (Loc 278 16 58)) + ADT + { adtname = "Wish" + , adtparams = [ "e" , "a" ] + , adtconstructors = + [ Untyped + (Area (Loc 244 16 24) (Loc 278 16 58)) + (Constructor + "Wish" + [ Untyped + (Area (Loc 250 16 30) (Loc 277 16 57)) + (TRArr + (Untyped + (Area (Loc 250 16 30) (Loc 257 16 37)) + (TRArr + (Untyped + (Area (Loc 250 16 30) (Loc 251 16 31)) (TRSingle "e")) + (Untyped + (Area (Loc 255 16 35) (Loc 257 16 37)) (TRSingle "{}")))) + (Untyped + (Area (Loc 263 16 43) (Loc 277 16 57)) + (TRArr + (Untyped + (Area (Loc 263 16 43) (Loc 270 16 50)) + (TRArr + (Untyped + (Area (Loc 263 16 43) (Loc 264 16 44)) + (TRSingle "a")) + (Untyped + (Area (Loc 268 16 48) (Loc 270 16 50)) + (TRSingle "{}")))) + (Untyped + (Area (Loc 275 16 55) (Loc 277 16 57)) (TRSingle "{}"))))) + ] + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TVar (TV 276 Star))) + (TCon (TC "{}" Star) "prelude"))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TVar (TV 277 Star))) + (TCon (TC "{}" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")))) + (TApp + (TApp + (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") + (TVar (TV 276 Star))) + (TVar (TV 277 Star))))) + ] + , adtType = + TApp + (TApp + (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") + (TVar (TV 590643385890189583 Star))) + (TVar (TV 590647783936702427 Star)) + , adtexported = True + } + , Untyped + (Area (Loc 627 32 1) (Loc 660 32 34)) + ADT + { adtname = "Todo" + , adtparams = [] + , adtconstructors = + [ Untyped + (Area (Loc 639 32 13) (Loc 660 32 34)) + (Constructor + "Todo" + [ Untyped + (Area (Loc 644 32 18) (Loc 650 32 24)) (TRSingle "String") + , Untyped + (Area (Loc 652 32 26) (Loc 659 32 33)) (TRSingle "Boolean") + ] + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Boolean" Star) "prelude")) + (TCon (TC "Todo" Star) "Module.mad")))) + ] + , adtType = TCon (TC "Todo" Star) "Module.mad" + , adtexported = False + } + ] + , ainterfaces = [] + , ainstances = [ Untyped - (Area (Loc 556 29 1) (Loc 623 29 68)) - Alias - { aliasname = "Action" - , aliasparams = [ "a" ] - , aliastype = - Untyped - (Area (Loc 580 29 25) (Loc 623 29 68)) - (TRArr - (Untyped (Area (Loc 580 29 25) (Loc 581 29 26)) (TRSingle "a")) - (Untyped - (Area (Loc 585 29 30) (Loc 623 29 68)) - (TRArr - (Untyped - (Area (Loc 585 29 30) (Loc 591 29 36)) (TRSingle "String")) - (Untyped - (Area (Loc 595 29 40) (Loc 623 29 68)) - (TRComp - "List" - [ Untyped - (Area (Loc 601 29 46) (Loc 623 29 68)) - (TRComp - "Wish" - [ Untyped - (Area (Loc 606 29 51) (Loc 614 29 59)) - (TRArr - (Untyped - (Area (Loc 607 29 52) (Loc 608 29 53)) - (TRSingle "a")) - (Untyped - (Area (Loc 612 29 57) (Loc 613 29 58)) - (TRSingle "a"))) - , Untyped - (Area (Loc 606 29 51) (Loc 623 29 68)) - (TRArr - (Untyped - (Area (Loc 616 29 61) (Loc 617 29 62)) - (TRSingle "a")) - (Untyped - (Area (Loc 621 29 66) (Loc 622 29 67)) - (TRSingle "a"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Instance + "Eq" + [ IsIn "Eq" [ TVar (TV 204274412242036023 Star) ] Nothing ] + (IsIn + "Eq" + [ TRecord + (fromList [ ( "todos" , TVar (TV 204274412242036023 Star) ) ]) + Nothing + (fromList []) + ] + Nothing) + (fromList + [ ( "==" + , ( Typed + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]))) + (TCon (TC "Boolean" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Assignment + "==" + (Typed + ([ IsIn "Eq" [ TVar (TV 259 Star) ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList []))) + (TCon (TC "Boolean" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 259 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$a__") + [ Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]))) + (TCon (TC "Boolean" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "todos" , TVar (TV 259 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 259 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$b__") + [ Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "Boolean" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TCon + (TC "Boolean" Star) "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TCon + (TC "Boolean" Star) + "prelude")) + (TCon + (TC "Boolean" Star) + "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "&&" False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just + (Area + (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TVar (TV 259 Star))) + (TCon + (TC "Boolean" Star) + "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TVar (TV 259 Star))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TVar + (TV 259 Star))) + (TCon + (TC "Boolean" Star) + "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "==" False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just + (Area + (Loc 0 0 0) + (Loc 0 0 0))) + ] :=> + TVar (TV 259 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ])) + (Area + (Loc 0 0 0) + (Loc 0 0 0)) + (Var "__$a__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ]))) + (TVar + (TV 259 Star))) + (Area + (Loc 0 0 0) + (Loc 0 0 0)) + (Var ".todos" False)))) + False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just + (Area + (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TVar (TV 259 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "todos" + , TVar (TV 259 Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar (TV 259 Star) + ) + ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "__$b__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar + (TV + 259 + Star) + ) + ]))) + (TVar (TV 259 Star))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var ".todos" False)))) + True)) + False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 259 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LBool "true")) + True) ]) - ]))))) - , aliasexported = True - } - , Untyped - (Area (Loc 661 33 1) (Loc 714 33 54)) - Alias - { aliasname = "State" - , aliasparams = [] - , aliastype = - Untyped - (Area (Loc 675 33 15) (Loc 714 33 54)) - (TRRecord - (fromList - [ ( "input" - , ( Area (Loc 677 33 17) (Loc 685 33 25) - , Untyped - (Area (Loc 686 33 26) (Loc 692 33 32)) (TRSingle "String") - ) - ) - , ( "todos" - , ( Area (Loc 694 33 34) (Loc 702 33 42) - , Untyped - (Area (Loc 703 33 43) (Loc 712 33 52)) - (TRComp - "List" - [ Untyped - (Area (Loc 708 33 48) (Loc 712 33 52)) (TRSingle "Todo") - ]) - ) - ) - ]) - Nothing) - , aliasexported = False - } - , Untyped - (Area (Loc 123 11 1) (Loc 155 11 33)) - ADT - { adtname = "Maybe" - , adtparams = [ "a" ] - , adtconstructors = - [ Untyped - (Area (Loc 138 11 16) (Loc 145 11 23)) - (Constructor - "Just" - [ Untyped (Area (Loc 143 11 21) (Loc 144 11 22)) (TRSingle "a") ] - (TApp - (TApp - (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 205 Star))) - (TApp - (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 205 Star))))) - , Untyped - (Area (Loc 148 11 26) (Loc 155 11 33)) - (Constructor - "Nothing" - [] - (TApp - (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 206 Star)))) - ] - , adtType = - TApp - (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 590647783936702427 Star)) - , adtexported = False - } - , Untyped - (Area (Loc 221 16 1) (Loc 278 16 58)) - ADT - { adtname = "Wish" - , adtparams = [ "e" , "a" ] - , adtconstructors = - [ Untyped - (Area (Loc 244 16 24) (Loc 278 16 58)) - (Constructor - "Wish" - [ Untyped - (Area (Loc 250 16 30) (Loc 277 16 57)) - (TRArr - (Untyped - (Area (Loc 250 16 30) (Loc 257 16 37)) - (TRArr - (Untyped - (Area (Loc 250 16 30) (Loc 251 16 31)) (TRSingle "e")) - (Untyped - (Area (Loc 255 16 35) (Loc 257 16 37)) (TRSingle "{}")))) - (Untyped - (Area (Loc 263 16 43) (Loc 277 16 57)) - (TRArr - (Untyped - (Area (Loc 263 16 43) (Loc 270 16 50)) - (TRArr - (Untyped - (Area (Loc 263 16 43) (Loc 264 16 44)) - (TRSingle "a")) - (Untyped - (Area (Loc 268 16 48) (Loc 270 16 50)) - (TRSingle "{}")))) - (Untyped - (Area (Loc 275 16 55) (Loc 277 16 57)) (TRSingle "{}"))))) - ] - (TApp - (TApp - (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + ]))) + , Forall + [ Star ] + ([ IsIn "Eq" [ TGen 0 ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TGen 0 ) ]) Nothing (fromList []))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TApp - (TApp - (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 207 Star))) - (TCon (TC "{}" Star) "prelude"))) - (TApp + (TRecord + (fromList [ ( "todos" , TGen 0 ) ]) Nothing (fromList []))) + (TCon (TC "Boolean" Star) "prelude"))) + ) + ) + ])) + , Untyped + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Instance + "Show" + [ IsIn "Show" [ TVar (TV 204274412242036023 Star) ] Nothing ] + (IsIn + "Show" + [ TRecord + (fromList [ ( "todos" , TVar (TV 204274412242036023 Star) ) ]) + Nothing + (fromList []) + ] + Nothing) + (fromList + [ ( "show" + , ( Typed + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "todos" , TVar (TV 270 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 270 Star) ) ]))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Assignment + "show" + (Typed + ([ IsIn "Show" [ TVar (TV 270 Star) ] Nothing ] :=> + TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TApp - (TApp - (TCon - (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 208 Star))) - (TCon (TC "{}" Star) "prelude"))) - (TCon (TC "{}" Star) "prelude")))) - (TApp - (TApp - (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 207 Star))) - (TVar (TV 208 Star))))) - ] - , adtType = - TApp - (TApp - (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 590643385890189583 Star))) - (TVar (TV 590647783936702427 Star)) - , adtexported = True - } - , Untyped - (Area (Loc 627 32 1) (Loc 660 32 34)) - ADT - { adtname = "Todo" - , adtparams = [] - , adtconstructors = - [ Untyped - (Area (Loc 639 32 13) (Loc 660 32 34)) - (Constructor - "Todo" - [ Untyped - (Area (Loc 644 32 18) (Loc 650 32 24)) (TRSingle "String") - , Untyped - (Area (Loc 652 32 26) (Loc 659 32 33)) (TRSingle "Boolean") - ] - (TApp - (TApp - (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TCon (TC "String" Star) "prelude")) - (TApp + (TRecord + (fromList [ ( "todos" , TVar (TV 270 Star) ) ]) + Nothing + (fromList []))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 270 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "todos" , TVar (TV 270 Star) ) ]) + Nothing + (fromList [ ( "todos" , TVar (TV 270 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$a__") + [ Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (TemplateString + [ Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr "{ ") + , Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 270 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + Nothing + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TCon + (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TCon + (TC "String" Star) + "prelude")) + (TCon + (TC "String" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "mappend" False)) + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr "todos: ")) + False)) + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 270 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Show" [ TVar (TV 270 Star) ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TVar (TV 270 Star))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "show" False)) + (Typed + ([ IsIn + "Show" + [ TVar (TV 270 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TVar (TV 270 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "todos" + , TVar (TV 270 Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar (TV 270 Star) + ) + ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "__$a__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "todos" + , TVar (TV 270 Star) + ) + ]) + Nothing + (fromList + [ ( "todos" + , TVar (TV 270 Star) + ) + ]))) + (TVar (TV 270 Star))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var ".todos" False)))) + True)) + True) + , Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr " }") + ]) + ]))) + , Forall + [ Star ] + ([ IsIn "Show" [ TGen 0 ] Nothing ] :=> + TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TCon (TC "Boolean" Star) "prelude")) - (TCon (TC "Todo" Star) "Module.mad")))) - ] - , adtType = TCon (TC "Todo" Star) "Module.mad" - , adtexported = False - } - ] - , ainterfaces = [] - , ainstances = - [ Untyped + (TRecord + (fromList [ ( "todos" , TGen 0 ) ]) Nothing (fromList []))) + (TCon (TC "String" Star) "prelude")) + ) + ) + ])) + , Untyped (Area (Loc 0 0 0) (Loc 0 0 0)) (Instance "Eq" @@ -2219,42 +5591,42 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 59 Star) ] Nothing - , IsIn "Eq" [ TVar (TV 71 Star) ] Nothing + ([ IsIn "Eq" [ TVar (TV 102 Star) ] Nothing + , IsIn "Eq" [ TVar (TV 114 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList []))) @@ -2263,8 +5635,8 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList []))) @@ -2274,33 +5646,33 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -2310,13 +5682,13 @@ "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -2324,33 +5696,33 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 59 Star) ) - , ( "todos" , TVar (TV 71 Star) ) + [ ( "input" , TVar (TV 102 Star) ) + , ( "todos" , TVar (TV 114 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -2359,7 +5731,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -2405,7 +5777,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -2414,7 +5786,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) @@ -2428,7 +5800,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 59 Star))) + (TVar (TV 102 Star))) (TCon (TC "Boolean" Star) "prelude")) @@ -2437,7 +5809,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] Nothing ] :=> TApp @@ -2451,7 +5823,7 @@ Star Star))) "prelude") - (TVar (TV 59 Star))) + (TVar (TV 102 Star))) (TApp (TApp (TCon @@ -2464,7 +5836,7 @@ Star))) "prelude") (TVar - (TV 59 Star))) + (TV 102 Star))) (TCon (TC "Boolean" Star) "prelude"))) @@ -2473,13 +5845,13 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 59 Star)) + TVar (TV 102 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -2489,13 +5861,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2504,13 +5876,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ])) @@ -2536,13 +5908,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2551,18 +5923,18 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]))) (TVar - (TV 59 Star))) + (TV 102 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -2571,12 +5943,12 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 59 Star)) + TVar (TV 102 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -2584,19 +5956,19 @@ TRecord (fromList [ ( "input" - , TVar (TV 59 Star) + , TVar (TV 102 Star) ) , ( "todos" - , TVar (TV 71 Star) + , TVar (TV 114 Star) ) ]) Nothing (fromList [ ( "input" - , TVar (TV 59 Star) + , TVar (TV 102 Star) ) , ( "todos" - , TVar (TV 71 Star) + , TVar (TV 114 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -2619,13 +5991,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2634,17 +6006,17 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]))) - (TVar (TV 59 Star))) + (TVar (TV 102 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".input" False)))) True)) @@ -2652,11 +6024,11 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 59 Star) ] + [ TVar (TV 102 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -2665,7 +6037,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -2716,7 +6088,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) @@ -2728,7 +6100,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) @@ -2745,7 +6117,7 @@ Star Star))) "prelude") - (TVar (TV 71 Star))) + (TVar (TV 114 Star))) (TCon (TC "Boolean" Star) "prelude")) @@ -2754,7 +6126,8 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) + [ TVar + (TV 114 Star) ] Nothing ] :=> @@ -2771,7 +6144,8 @@ "prelude") (TVar (TV - 71 Star))) + 114 + Star))) (TApp (TApp (TCon @@ -2785,7 +6159,7 @@ "prelude") (TVar (TV - 71 + 114 Star))) (TCon (TC @@ -2799,14 +6173,15 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) + [ TVar + (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 71 Star)) + TVar (TV 114 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -2818,13 +6193,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2833,13 +6208,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ])) @@ -2867,13 +6242,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2882,19 +6257,19 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]))) (TVar (TV - 71 + 114 Star))) (Area (Loc 0 0 0) @@ -2906,13 +6281,13 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 71 Star)) + TVar (TV 114 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -2922,13 +6297,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2937,13 +6312,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ])) @@ -2969,13 +6344,13 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]) @@ -2984,18 +6359,18 @@ [ ( "input" , TVar (TV - 59 + 102 Star) ) , ( "todos" , TVar (TV - 71 + 114 Star) ) ]))) (TVar - (TV 71 Star))) + (TV 114 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -3005,7 +6380,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 71 Star) ] + [ TVar (TV 114 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -3059,49 +6434,49 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 84 Star) ] Nothing ] :=> + ([ IsIn "Eq" [ TVar (TV 127 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -3111,25 +6486,25 @@ "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -3148,12 +6523,12 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (TupleConstructor [ Typed @@ -3162,7 +6537,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False) , Typed @@ -3171,14 +6546,14 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$b__" False) ])) [ Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -3202,12 +6577,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))))) + (TVar (TV 127 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -3227,12 +6602,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PTuple [ Typed @@ -3243,34 +6618,34 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 84 Star)) + TVar (TV 127 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "a0") @@ -3283,34 +6658,34 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 84 Star)) + TVar (TV 127 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "b0") @@ -3319,7 +6694,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> @@ -3329,7 +6704,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) @@ -3395,7 +6770,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) @@ -3411,7 +6786,7 @@ ([ IsIn "Eq" [ TVar - (TV 84 Star) + (TV 127 Star) ] (Just (Area @@ -3432,7 +6807,7 @@ "prelude") (TVar (TV - 84 + 127 Star))) (TCon (TC @@ -3448,7 +6823,7 @@ "Eq" [ TVar (TV - 84 + 127 Star) ] Nothing @@ -3466,7 +6841,7 @@ "prelude") (TVar (TV - 84 + 127 Star))) (TApp (TApp @@ -3481,7 +6856,7 @@ "prelude") (TVar (TV - 84 + 127 Star))) (TCon (TC @@ -3497,7 +6872,7 @@ "Eq" [ TVar (TV - 84 + 127 Star) ] (Just @@ -3513,7 +6888,8 @@ ] :=> TVar (TV - 84 Star)) + 127 + Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -3523,7 +6899,7 @@ ([ IsIn "Eq" [ TVar - (TV 84 Star) + (TV 127 Star) ] (Just (Area @@ -3531,7 +6907,7 @@ (Loc 0 0 0))) ] :=> - TVar (TV 84 Star)) + TVar (TV 127 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -3541,7 +6917,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 84 Star) ] + [ TVar (TV 127 Star) ] (Just (Area (Loc 0 0 0) @@ -3575,12 +6951,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))))) + (TVar (TV 127 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -3600,12 +6976,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PTuple [ Typed @@ -3616,7 +6992,7 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" []) , Typed @@ -3627,7 +7003,7 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))) + (TVar (TV 127 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" []) ])) @@ -3659,12 +7035,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star))))) + (TVar (TV 127 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -3684,12 +7060,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 84 Star)))) + (TVar (TV 127 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed @@ -3742,8 +7118,8 @@ (TApp (TApp (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") @@ -3751,15 +7127,15 @@ (TApp (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 108 Star) ] Nothing - , IsIn "Eq" [ TVar (TV 109 Star) ] Nothing + ([ IsIn "Eq" [ TVar (TV 151 Star) ] Nothing + , IsIn "Eq" [ TVar (TV 152 Star) ] Nothing ] :=> TApp (TApp @@ -3769,8 +7145,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") @@ -3779,8 +7155,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs @@ -3797,7 +7173,7 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -3811,7 +7187,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 109 Star))) + (TVar (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -3822,8 +7198,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed @@ -3839,7 +7215,7 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -3853,7 +7229,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 109 Star))) + (TVar (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -3869,8 +7245,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs @@ -3889,7 +7265,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -3906,7 +7282,7 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 109 Star))) + (TVar (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -3917,8 +7293,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed @@ -3937,7 +7313,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -3954,7 +7330,7 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 109 Star))) + (TVar (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -3980,8 +7356,8 @@ (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon @@ -3989,8 +7365,8 @@ "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (TupleConstructor [ Typed @@ -4003,8 +7379,8 @@ (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False) , Typed @@ -4017,8 +7393,8 @@ (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$b__" False) ])) @@ -4041,7 +7417,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp @@ -4062,7 +7438,7 @@ (Kfun Star Star))) "prelude") - (TVar (TV 109 Star))) + (TVar (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -4094,8 +7470,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon @@ -4105,8 +7481,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -4129,8 +7505,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon @@ -4140,8 +7516,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PTuple [ Typed @@ -4156,8 +7532,8 @@ (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Wish" @@ -4188,7 +7564,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4219,7 +7595,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4262,7 +7638,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4293,7 +7669,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4336,7 +7712,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4367,7 +7743,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4409,7 +7785,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4439,7 +7815,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4465,8 +7841,8 @@ (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Wish" @@ -4497,7 +7873,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4528,7 +7904,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4571,7 +7947,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4602,7 +7978,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4645,7 +8021,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4676,7 +8052,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4718,7 +8094,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -4748,7 +8124,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -4786,7 +8162,7 @@ Star Star))) "prelude") - (TVar (TV 108 Star))) + (TVar (TV 151 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -4812,7 +8188,7 @@ Star))) "prelude") (TVar - (TV 109 Star))) + (TV 152 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -4852,7 +8228,7 @@ "prelude") (TVar (TV - 108 Star))) + 151 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -4880,7 +8256,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC "{}" Star) @@ -4978,7 +8354,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5009,7 +8385,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5058,7 +8434,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5089,7 +8465,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5143,7 +8519,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5174,7 +8550,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5222,7 +8598,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5253,7 +8629,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5303,7 +8679,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5334,7 +8710,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5381,7 +8757,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5412,7 +8788,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5460,7 +8836,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5491,7 +8867,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5539,7 +8915,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5570,7 +8946,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5614,7 +8990,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5645,7 +9021,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5688,7 +9064,7 @@ "prelude") (TVar (TV - 108 + 151 Star))) (TCon (TC @@ -5719,7 +9095,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC @@ -5764,7 +9140,7 @@ "prelude") (TVar (TV - 108 Star))) + 151 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -5792,7 +9168,7 @@ "prelude") (TVar (TV - 109 + 152 Star))) (TCon (TC "{}" Star) @@ -5837,8 +9213,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon @@ -5848,8 +9224,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star))))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -5872,8 +9248,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (TApp (TApp (TCon @@ -5883,8 +9259,8 @@ Star (Kfun Star Star))) "Module.mad") - (TVar (TV 108 Star))) - (TVar (TV 109 Star)))) + (TVar (TV 151 Star))) + (TVar (TV 152 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed @@ -6926,29 +10302,29 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 146 Star) ) - , ( "todos" , TVar (TV 154 Star) ) + [ ( "input" , TVar (TV 189 Star) ) + , ( "todos" , TVar (TV 197 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 146 Star) ) - , ( "todos" , TVar (TV 154 Star) ) + [ ( "input" , TVar (TV 189 Star) ) + , ( "todos" , TVar (TV 197 Star) ) ]))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 146 Star) ] Nothing - , IsIn "Show" [ TVar (TV 154 Star) ] Nothing + ([ IsIn "Show" [ TVar (TV 189 Star) ] Nothing + , IsIn "Show" [ TVar (TV 197 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "input" , TVar (TV 146 Star) ) - , ( "todos" , TVar (TV 154 Star) ) + [ ( "input" , TVar (TV 189 Star) ) + , ( "todos" , TVar (TV 197 Star) ) ]) Nothing (fromList []))) @@ -6966,7 +10342,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 146 Star) ] + [ TVar (TV 189 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Monoid" @@ -6978,18 +10354,18 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 154 Star) ] + [ TVar (TV 197 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "input" , TVar (TV 146 Star) ) - , ( "todos" , TVar (TV 154 Star) ) + [ ( "input" , TVar (TV 189 Star) ) + , ( "todos" , TVar (TV 197 Star) ) ]) Nothing (fromList - [ ( "input" , TVar (TV 146 Star) ) - , ( "todos" , TVar (TV 154 Star) ) + [ ( "input" , TVar (TV 189 Star) ) + , ( "todos" , TVar (TV 197 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") @@ -7012,7 +10388,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 146 Star) ] + [ TVar (TV 189 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7100,7 +10476,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 146 Star) ] + [ TVar (TV 189 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7108,7 +10484,7 @@ (App (Typed ([ IsIn - "Show" [ TVar (TV 146 Star) ] Nothing + "Show" [ TVar (TV 189 Star) ] Nothing ] :=> TApp (TApp @@ -7118,17 +10494,17 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 146 Star))) + (TVar (TV 189 Star))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "show" False)) (Typed ([ IsIn "Show" - [ TVar (TV 146 Star) ] + [ TVar (TV 189 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 146 Star)) + TVar (TV 189 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -7136,19 +10512,19 @@ TRecord (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ]) Nothing (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -7167,13 +10543,13 @@ (TRecord (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) ]) (Just - (TVar (TV 148 Star))) + (TVar (TV 191 Star))) (fromList []))) - (TVar (TV 146 Star))) + (TVar (TV 189 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".input" False)))) True)) @@ -7193,7 +10569,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 154 Star) ] + [ TVar (TV 197 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7281,7 +10657,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 154 Star) ] + [ TVar (TV 197 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7289,7 +10665,7 @@ (App (Typed ([ IsIn - "Show" [ TVar (TV 154 Star) ] Nothing + "Show" [ TVar (TV 197 Star) ] Nothing ] :=> TApp (TApp @@ -7299,17 +10675,17 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 154 Star))) + (TVar (TV 197 Star))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "show" False)) (Typed ([ IsIn "Show" - [ TVar (TV 154 Star) ] + [ TVar (TV 197 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 154 Star)) + TVar (TV 197 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -7317,19 +10693,19 @@ TRecord (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ]) Nothing (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -7348,22 +10724,22 @@ (TRecord (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ]) Nothing (fromList [ ( "input" - , TVar (TV 146 Star) + , TVar (TV 189 Star) ) , ( "todos" - , TVar (TV 154 Star) + , TVar (TV 197 Star) ) ]))) - (TVar (TV 154 Star))) + (TVar (TV 197 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".todos" False)))) True)) @@ -7411,37 +10787,37 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star)))) + (TVar (TV 205 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 162 Star) ] Nothing ] :=> + ([ IsIn "Show" [ TVar (TV 205 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star)))) + (TVar (TV 205 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7451,13 +10827,13 @@ ([] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False)) [ Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -7469,7 +10845,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star)))) + (TVar (TV 205 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -7479,30 +10855,30 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 162 Star)) + TVar (TV 205 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "a0") ])) (Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -7516,7 +10892,7 @@ , Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> @@ -7526,7 +10902,7 @@ (Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] Nothing ] :=> TApp @@ -7538,7 +10914,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (TCon (TC "String" Star) "prelude")) @@ -7547,13 +10923,13 @@ (Typed ([ IsIn "Show" - [ TVar (TV 162 Star) ] + [ TVar (TV 205 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 162 Star)) + TVar (TV 205 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "a0" False)) True) @@ -7574,7 +10950,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star)))) + (TVar (TV 205 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -7584,7 +10960,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" [])) (Typed @@ -7602,7 +10978,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star)))) + (TVar (TV 205 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -7612,7 +10988,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 162 Star))) + (TVar (TV 205 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed @@ -7658,15 +11034,15 @@ (TApp (TApp (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star)))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 176 Star) ] Nothing - , IsIn "Show" [ TVar (TV 177 Star) ] Nothing + ([ IsIn "Show" [ TVar (TV 219 Star) ] Nothing + , IsIn "Show" [ TVar (TV 220 Star) ] Nothing ] :=> TApp (TApp @@ -7676,8 +11052,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star)))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs @@ -7694,7 +11070,7 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -7708,7 +11084,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 177 Star))) + (TVar (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -7719,8 +11095,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed @@ -7736,7 +11112,7 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -7750,7 +11126,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 177 Star))) + (TVar (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -7766,8 +11142,8 @@ (TCon (TC "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False)) [ Typed @@ -7786,7 +11162,7 @@ "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -7803,7 +11179,7 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 177 Star))) + (TVar (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) ] @@ -7821,8 +11197,8 @@ "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star)))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -7835,8 +11211,8 @@ "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Wish" @@ -7863,7 +11239,7 @@ Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -7889,7 +11265,7 @@ Star))) "prelude") (TVar - (TV 177 Star))) + (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -7920,7 +11296,7 @@ Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -7946,7 +11322,7 @@ Star))) "prelude") (TVar - (TV 177 Star))) + (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -7973,7 +11349,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp @@ -7995,7 +11371,7 @@ (Kfun Star Star))) "prelude") - (TVar (TV 177 Star))) + (TVar (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8022,7 +11398,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) (TApp (TApp @@ -8041,7 +11417,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 177 Star))) + (TVar (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) (TCon (TC "{}" Star) "prelude")) @@ -8079,7 +11455,7 @@ Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8105,7 +11481,7 @@ Star))) "prelude") (TVar - (TV 177 Star))) + (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8145,7 +11521,7 @@ "prelude") (TVar (TV - 176 Star))) + 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8173,7 +11549,7 @@ "prelude") (TVar (TV - 177 + 220 Star))) (TCon (TC "{}" Star) @@ -8217,7 +11593,7 @@ "prelude") (TVar (TV - 176 + 219 Star))) (TCon (TC "{}" Star) @@ -8246,7 +11622,7 @@ "prelude") (TVar (TV - 177 + 220 Star))) (TCon (TC @@ -8288,7 +11664,7 @@ "prelude") (TVar (TV - 176 Star))) + 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8316,7 +11692,7 @@ "prelude") (TVar (TV - 177 + 220 Star))) (TCon (TC "{}" Star) @@ -8350,7 +11726,7 @@ Star Star))) "prelude") - (TVar (TV 176 Star))) + (TVar (TV 219 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8376,7 +11752,7 @@ Star))) "prelude") (TVar - (TV 177 Star))) + (TV 220 Star))) (TCon (TC "{}" Star) "prelude"))) @@ -8406,8 +11782,8 @@ "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star)))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -8420,8 +11796,8 @@ "Wish" (Kfun Star (Kfun Star Star))) "Module.mad") - (TVar (TV 176 Star))) - (TVar (TV 177 Star))) + (TVar (TV 219 Star))) + (TVar (TV 220 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed diff --git a/.snapshots/should_fail_to_infer_record_if_their_fields_do_not_match/golden b/.snapshots/should_fail_to_infer_record_if_their_fields_do_not_match/golden index 798e1c159..31723baf7 100644 --- a/.snapshots/should_fail_to_infer_record_if_their_fields_do_not_match/golden +++ b/.snapshots/should_fail_to_infer_record_if_their_fields_do_not_match/golden @@ -9,66 +9,231 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 123 11 1) (Loc 174 11 52)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 123 11 1) (Loc 174 11 52)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 130 11 8) (Loc 174 11 52)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 173 11 51) (Loc 173 11 51)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Boolean" Star) "prelude") (Area (Loc 138 11 16) (Loc 172 11 50)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TRecord + (fromList + [ ( "x" , TCon (TC "Integer" Star) "prelude" ) + , ( "y" , TCon (TC "Integer" Star) "prelude" ) + ]) + Nothing + (fromList []) + ] + (Just (Area (Loc 153 11 31) (Loc 155 11 33))) + , IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList + [ ( "x" , TCon (TC "Integer" Star) "prelude" ) + , ( "y" , TCon (TC "Integer" Star) "prelude" ) + ]) + Nothing + (fromList []))) + (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 138 11 16) (Loc 172 11 50)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TRecord + (fromList + [ ( "x" + , TCon (TC "Integer" Star) "prelude" + ) + , ( "y" + , TCon (TC "Integer" Star) "prelude" + ) + ]) + Nothing + (fromList []) + ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "x" + , TCon (TC "Integer" Star) "prelude" + ) + , ( "y" + , TCon (TC "Integer" Star) "prelude" + ) + ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "x" + , TCon (TC "Integer" Star) "prelude" + ) + , ( "y" + , TCon (TC "Integer" Star) "prelude" + ) + ]) + Nothing + (fromList []))) + (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 153 11 31) (Loc 155 11 33)) (Var "==" False)) (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TRecord + (fromList + [ ( "x" + , TCon (TC "Integer" Star) "prelude" + ) + , ( "y" + , TCon (TC "Integer" Star) "prelude" + ) + ]) + Nothing + (fromList []) + ] + (Just (Area (Loc 153 11 31) (Loc 155 11 33))) + , IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + , IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TRecord + (fromList + [ ( "x" , TCon (TC "Integer" Star) "prelude" ) + , ( "y" , TCon (TC "Integer" Star) "prelude" ) + ]) + Nothing + (fromList [])) (Area (Loc 138 11 16) (Loc 152 11 30)) (Record [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 140 11 18) (Loc 144 11 22)) (Field ( "x" , Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 143 11 21) (Loc 144 11 22)) (LNum "3") )) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 146 11 24) (Loc 150 11 28)) (Field ( "y" , Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 149 11 27) (Loc 150 11 28)) (LNum "5") )) ])) False)) (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Eq" + [ TRecord + (fromList + [ ( "x" , TCon (TC "Integer" Star) "prelude" ) + , ( "y" , TCon (TC "Integer" Star) "prelude" ) + ]) + Nothing + (fromList []) + ] + (Just (Area (Loc 153 11 31) (Loc 155 11 33))) + , IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TRecord + (fromList + [ ( "name" , TCon (TC "String" Star) "prelude" ) ]) + Nothing + (fromList [])) (Area (Loc 156 11 34) (Loc 172 11 50)) (Record [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 158 11 36) (Loc 170 11 48)) (Field ( "name" @@ -128,34 +293,34 @@ (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 11 Star) ) ]))) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 11 Star) ) ]))) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 11 Star) ] Nothing ] :=> + ([ IsIn "Eq" [ TVar (TV 18 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing (fromList []))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing (fromList []))) (TCon (TC "Boolean" Star) "prelude"))) @@ -164,19 +329,19 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 11 Star) ) ])) + (fromList [ ( "name" , TVar (TV 18 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -185,28 +350,28 @@ (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 11 Star) ) ]))) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord - (fromList [ ( "name" , TVar (TV 11 Star) ) ]) + (fromList [ ( "name" , TVar (TV 18 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 11 Star) ) ])) + (fromList [ ( "name" , TVar (TV 18 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -215,7 +380,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -261,7 +426,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -270,7 +435,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) @@ -284,7 +449,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 11 Star))) + (TVar (TV 18 Star))) (TCon (TC "Boolean" Star) "prelude")) @@ -293,7 +458,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] Nothing ] :=> TApp @@ -307,7 +472,7 @@ Star Star))) "prelude") - (TVar (TV 11 Star))) + (TVar (TV 18 Star))) (TApp (TApp (TCon @@ -320,7 +485,7 @@ Star))) "prelude") (TVar - (TV 11 Star))) + (TV 18 Star))) (TCon (TC "Boolean" Star) "prelude"))) @@ -329,13 +494,13 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 11 Star)) + TVar (TV 18 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -345,7 +510,7 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ]) @@ -354,7 +519,7 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ])) @@ -380,7 +545,7 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ]) @@ -389,12 +554,12 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ]))) (TVar - (TV 11 Star))) + (TV 18 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -403,12 +568,12 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 11 Star)) + TVar (TV 18 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -416,13 +581,13 @@ TRecord (fromList [ ( "name" - , TVar (TV 11 Star) + , TVar (TV 18 Star) ) ]) Nothing (fromList [ ( "name" - , TVar (TV 11 Star) + , TVar (TV 18 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -445,7 +610,7 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ]) @@ -454,11 +619,11 @@ [ ( "name" , TVar (TV - 11 + 18 Star) ) ]))) - (TVar (TV 11 Star))) + (TVar (TV 18 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".name" False)))) True)) @@ -466,7 +631,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 11 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -519,42 +684,42 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 26 Star) ] Nothing - , IsIn "Eq" [ TVar (TV 38 Star) ] Nothing + ([ IsIn "Eq" [ TVar (TV 33 Star) ] Nothing + , IsIn "Eq" [ TVar (TV 45 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList []))) @@ -563,8 +728,8 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList []))) @@ -574,33 +739,33 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -610,13 +775,13 @@ "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -624,33 +789,33 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 26 Star) ) - , ( "y" , TVar (TV 38 Star) ) + [ ( "x" , TVar (TV 33 Star) ) + , ( "y" , TVar (TV 45 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -659,7 +824,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -705,7 +870,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -714,7 +879,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) @@ -728,7 +893,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 26 Star))) + (TVar (TV 33 Star))) (TCon (TC "Boolean" Star) "prelude")) @@ -737,7 +902,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] Nothing ] :=> TApp @@ -751,7 +916,7 @@ Star Star))) "prelude") - (TVar (TV 26 Star))) + (TVar (TV 33 Star))) (TApp (TApp (TCon @@ -764,7 +929,7 @@ Star))) "prelude") (TVar - (TV 26 Star))) + (TV 33 Star))) (TCon (TC "Boolean" Star) "prelude"))) @@ -773,13 +938,13 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 26 Star)) + TVar (TV 33 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -789,13 +954,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -804,13 +969,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ])) @@ -836,13 +1001,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -851,18 +1016,18 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]))) (TVar - (TV 26 Star))) + (TV 33 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -871,12 +1036,12 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 26 Star)) + TVar (TV 33 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -884,19 +1049,19 @@ TRecord (fromList [ ( "x" - , TVar (TV 26 Star) + , TVar (TV 33 Star) ) , ( "y" - , TVar (TV 38 Star) + , TVar (TV 45 Star) ) ]) Nothing (fromList [ ( "x" - , TVar (TV 26 Star) + , TVar (TV 33 Star) ) , ( "y" - , TVar (TV 38 Star) + , TVar (TV 45 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -919,13 +1084,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -934,17 +1099,17 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]))) - (TVar (TV 26 Star))) + (TVar (TV 33 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".x" False)))) True)) @@ -952,11 +1117,11 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 26 Star) ] + [ TVar (TV 33 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -965,7 +1130,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -1016,7 +1181,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) @@ -1028,7 +1193,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) @@ -1045,7 +1210,7 @@ Star Star))) "prelude") - (TVar (TV 38 Star))) + (TVar (TV 45 Star))) (TCon (TC "Boolean" Star) "prelude")) @@ -1054,7 +1219,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) + [ TVar (TV 45 Star) ] Nothing ] :=> @@ -1071,7 +1236,7 @@ "prelude") (TVar (TV - 38 Star))) + 45 Star))) (TApp (TApp (TCon @@ -1085,7 +1250,7 @@ "prelude") (TVar (TV - 38 + 45 Star))) (TCon (TC @@ -1099,14 +1264,14 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 38 Star)) + TVar (TV 45 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -1118,13 +1283,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -1133,13 +1298,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ])) @@ -1167,13 +1332,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -1182,19 +1347,19 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]))) (TVar (TV - 38 + 45 Star))) (Area (Loc 0 0 0) @@ -1205,13 +1370,13 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 38 Star)) + TVar (TV 45 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -1221,13 +1386,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -1236,13 +1401,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ])) @@ -1268,13 +1433,13 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]) @@ -1283,18 +1448,18 @@ [ ( "x" , TVar (TV - 26 + 33 Star) ) , ( "y" , TVar (TV - 38 + 45 Star) ) ]))) (TVar - (TV 38 Star))) + (TV 45 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -1304,7 +1469,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 38 Star) ] + [ TVar (TV 45 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -1358,20 +1523,20 @@ (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 51 Star) ) ]) + (fromList [ ( "name" , TVar (TV 58 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 51 Star) ) ]))) + (fromList [ ( "name" , TVar (TV 58 Star) ) ]))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 51 Star) ] Nothing ] :=> + ([ IsIn "Show" [ TVar (TV 58 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord - (fromList [ ( "name" , TVar (TV 51 Star) ) ]) + (fromList [ ( "name" , TVar (TV 58 Star) ) ]) Nothing (fromList []))) (TCon (TC "String" Star) "prelude")) @@ -1388,13 +1553,13 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 51 Star) ] + [ TVar (TV 58 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord - (fromList [ ( "name" , TVar (TV 51 Star) ) ]) + (fromList [ ( "name" , TVar (TV 58 Star) ) ]) Nothing - (fromList [ ( "name" , TVar (TV 51 Star) ) ])) + (fromList [ ( "name" , TVar (TV 58 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed @@ -1416,7 +1581,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 51 Star) ] + [ TVar (TV 58 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1504,7 +1669,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 51 Star) ] + [ TVar (TV 58 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1512,7 +1677,7 @@ (App (Typed ([ IsIn - "Show" [ TVar (TV 51 Star) ] Nothing + "Show" [ TVar (TV 58 Star) ] Nothing ] :=> TApp (TApp @@ -1522,17 +1687,17 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 51 Star))) + (TVar (TV 58 Star))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "show" False)) (Typed ([ IsIn "Show" - [ TVar (TV 51 Star) ] + [ TVar (TV 58 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 51 Star)) + TVar (TV 58 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -1540,13 +1705,13 @@ TRecord (fromList [ ( "name" - , TVar (TV 51 Star) + , TVar (TV 58 Star) ) ]) Nothing (fromList [ ( "name" - , TVar (TV 51 Star) + , TVar (TV 58 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -1565,16 +1730,16 @@ (TRecord (fromList [ ( "name" - , TVar (TV 51 Star) + , TVar (TV 58 Star) ) ]) Nothing (fromList [ ( "name" - , TVar (TV 51 Star) + , TVar (TV 58 Star) ) ]))) - (TVar (TV 51 Star))) + (TVar (TV 58 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".name" False)))) True)) @@ -1624,29 +1789,29 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 62 Star) ) - , ( "y" , TVar (TV 70 Star) ) + [ ( "x" , TVar (TV 69 Star) ) + , ( "y" , TVar (TV 77 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 62 Star) ) - , ( "y" , TVar (TV 70 Star) ) + [ ( "x" , TVar (TV 69 Star) ) + , ( "y" , TVar (TV 77 Star) ) ]))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 62 Star) ] Nothing - , IsIn "Show" [ TVar (TV 70 Star) ] Nothing + ([ IsIn "Show" [ TVar (TV 69 Star) ] Nothing + , IsIn "Show" [ TVar (TV 77 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TRecord (fromList - [ ( "x" , TVar (TV 62 Star) ) - , ( "y" , TVar (TV 70 Star) ) + [ ( "x" , TVar (TV 69 Star) ) + , ( "y" , TVar (TV 77 Star) ) ]) Nothing (fromList []))) @@ -1664,7 +1829,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 62 Star) ] + [ TVar (TV 69 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Monoid" @@ -1676,18 +1841,18 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 70 Star) ] + [ TVar (TV 77 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TRecord (fromList - [ ( "x" , TVar (TV 62 Star) ) - , ( "y" , TVar (TV 70 Star) ) + [ ( "x" , TVar (TV 69 Star) ) + , ( "y" , TVar (TV 77 Star) ) ]) Nothing (fromList - [ ( "x" , TVar (TV 62 Star) ) - , ( "y" , TVar (TV 70 Star) ) + [ ( "x" , TVar (TV 69 Star) ) + , ( "y" , TVar (TV 77 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") @@ -1710,7 +1875,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 62 Star) ] + [ TVar (TV 69 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1798,7 +1963,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 62 Star) ] + [ TVar (TV 69 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1806,7 +1971,7 @@ (App (Typed ([ IsIn - "Show" [ TVar (TV 62 Star) ] Nothing + "Show" [ TVar (TV 69 Star) ] Nothing ] :=> TApp (TApp @@ -1816,17 +1981,17 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 62 Star))) + (TVar (TV 69 Star))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "show" False)) (Typed ([ IsIn "Show" - [ TVar (TV 62 Star) ] + [ TVar (TV 69 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 62 Star)) + TVar (TV 69 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -1834,19 +1999,19 @@ TRecord (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ]) Nothing (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -1865,13 +2030,13 @@ (TRecord (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) ]) (Just - (TVar (TV 64 Star))) + (TVar (TV 71 Star))) (fromList []))) - (TVar (TV 62 Star))) + (TVar (TV 69 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".x" False)))) True)) @@ -1891,7 +2056,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 70 Star) ] + [ TVar (TV 77 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1979,7 +2144,7 @@ (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 70 Star) ] + [ TVar (TV 77 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1987,7 +2152,7 @@ (App (Typed ([ IsIn - "Show" [ TVar (TV 70 Star) ] Nothing + "Show" [ TVar (TV 77 Star) ] Nothing ] :=> TApp (TApp @@ -1997,17 +2162,17 @@ (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 70 Star))) + (TVar (TV 77 Star))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "show" False)) (Typed ([ IsIn "Show" - [ TVar (TV 70 Star) ] + [ TVar (TV 77 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 70 Star)) + TVar (TV 77 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Access (Typed @@ -2015,19 +2180,19 @@ TRecord (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ]) Nothing (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ])) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -2046,22 +2211,22 @@ (TRecord (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ]) Nothing (fromList [ ( "x" - , TVar (TV 62 Star) + , TVar (TV 69 Star) ) , ( "y" - , TVar (TV 70 Star) + , TVar (TV 77 Star) ) ]))) - (TVar (TV 70 Star))) + (TVar (TV 77 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var ".y" False)))) True)) diff --git a/.snapshots/should_fail_to_resolve_a_pattern_when_the_pattern_constructor_does_not_match_the_ADT/golden b/.snapshots/should_fail_to_resolve_a_pattern_when_the_pattern_constructor_does_not_match_the_ADT/golden index 017cd3b5c..36159e964 100644 --- a/.snapshots/should_fail_to_resolve_a_pattern_when_the_pattern_constructor_does_not_match_the_ADT/golden +++ b/.snapshots/should_fail_to_resolve_a_pattern_when_the_pattern_constructor_does_not_match_the_ADT/golden @@ -9,67 +9,120 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 54 4 1) (Loc 144 10 2)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 54 4 1) (Loc 144 10 2)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 61 4 8) (Loc 144 10 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 143 10 1) (Loc 143 10 1)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Failure" Star) "Module.mad") (Area (Loc 71 5 3) (Loc 85 5 17)) (Assignment "perhaps" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Failure" Star) "Module.mad") (Area (Loc 81 5 13) (Loc 85 5 17)) - (Var "Nope" False))) + (Var "Nope" True))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Integer" Star) "prelude") (Area (Loc 88 6 3) (Loc 142 9 4)) (Where (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Failure" Star) "Module.mad") (Area (Loc 94 6 9) (Loc 101 6 16)) (Var "perhaps" False)) [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TCon (TC "Integer" Star) "prelude"))) + (TCon (TC "Integer" Star) "prelude")) (Area (Loc 109 7 5) (Loc 121 7 17)) (Is (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TCon (TC "Integer" Star) "prelude")) (Area (Loc 109 7 5) (Loc 116 7 12)) (PCon "Just" [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Integer" Star) "prelude") (Area (Loc 114 7 10) (Loc 115 7 11)) (PVar "a") ])) (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "Integer" Star) "prelude") (Area (Loc 120 7 16) (Loc 121 7 17)) (Var "a" False))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TCon (TC "Integer" Star) "prelude"))) + (TCon (TC "Integer" Star) "prelude")) (Area (Loc 126 8 5) (Loc 138 8 17)) (Is (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") + (TCon (TC "Integer" Star) "prelude")) (Area (Loc 126 8 5) (Loc 133 8 12)) (PCon "Nothing" [])) (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 137 8 16) (Loc 138 8 17)) (LNum "0"))) ]) @@ -113,10 +166,10 @@ (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 45 Star))) + (TVar (TV 55 Star))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 45 Star))))) + (TVar (TV 55 Star))))) , Untyped (Area (Loc 25 1 26) (Loc 32 1 33)) (Constructor @@ -124,7 +177,7 @@ [] (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 46 Star)))) + (TVar (TV 56 Star)))) ] , adtType = TApp @@ -169,49 +222,49 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "==" (Typed - ([ IsIn "Eq" [ TVar (TV 7 Star) ] Nothing ] :=> + ([ IsIn "Eq" [ TVar (TV 17 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TCon (TC "Boolean" Star) "prelude"))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -221,25 +274,25 @@ "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$b__") [ Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "Boolean" Star) "prelude") @@ -258,12 +311,12 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (TupleConstructor [ Typed @@ -272,7 +325,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False) , Typed @@ -281,14 +334,14 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$b__" False) ])) [ Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -312,12 +365,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))))) + (TVar (TV 17 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -337,12 +390,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PTuple [ Typed @@ -353,34 +406,34 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 7 Star)) + TVar (TV 17 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "a0") @@ -393,34 +446,34 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 7 Star)) + TVar (TV 17 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "b0") @@ -429,7 +482,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> @@ -439,7 +492,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) @@ -505,7 +558,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) @@ -520,7 +573,8 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) + [ TVar + (TV 17 Star) ] (Just (Area @@ -541,7 +595,8 @@ "prelude") (TVar (TV - 7 Star))) + 17 + Star))) (TCon (TC "Boolean" @@ -556,7 +611,7 @@ "Eq" [ TVar (TV - 7 + 17 Star) ] Nothing @@ -574,7 +629,7 @@ "prelude") (TVar (TV - 7 + 17 Star))) (TApp (TApp @@ -589,7 +644,7 @@ "prelude") (TVar (TV - 7 + 17 Star))) (TCon (TC @@ -605,7 +660,7 @@ "Eq" [ TVar (TV - 7 + 17 Star) ] (Just @@ -620,7 +675,8 @@ 0))) ] :=> TVar - (TV 7 Star)) + (TV + 17 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -629,7 +685,8 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) + [ TVar + (TV 17 Star) ] (Just (Area @@ -637,7 +694,7 @@ (Loc 0 0 0))) ] :=> - TVar (TV 7 Star)) + TVar (TV 17 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) @@ -647,7 +704,7 @@ (Typed ([ IsIn "Eq" - [ TVar (TV 7 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 0 0 0) @@ -681,12 +738,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))))) + (TVar (TV 17 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -706,12 +763,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PTuple [ Typed @@ -722,7 +779,7 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" []) , Typed @@ -733,7 +790,7 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))) + (TVar (TV 17 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" []) ])) @@ -765,12 +822,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star))))) + (TVar (TV 17 Star))))) (TCon (TC "Boolean" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -790,12 +847,12 @@ "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 7 Star)))) + (TVar (TV 17 Star)))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed @@ -1056,37 +1113,37 @@ (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star)))) + (TVar (TV 41 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Assignment "show" (Typed - ([ IsIn "Show" [ TVar (TV 31 Star) ] Nothing ] :=> + ([ IsIn "Show" [ TVar (TV 41 Star) ] Nothing ] :=> TApp (TApp (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") (TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star)))) + (TVar (TV 41 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Abs (Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__$a__") [ Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1096,13 +1153,13 @@ ([] :=> TApp (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__$a__" False)) [ Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TApp @@ -1114,7 +1171,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star)))) + (TVar (TV 41 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -1124,30 +1181,30 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Just" [ Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) , IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 31 Star)) + TVar (TV 41 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (PVar "a0") ])) (Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> TCon (TC "String" Star) "prelude") @@ -1161,7 +1218,7 @@ , Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> @@ -1171,7 +1228,7 @@ (Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] Nothing ] :=> TApp @@ -1183,7 +1240,7 @@ Star (Kfun Star Star))) "prelude") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (TCon (TC "String" Star) "prelude")) @@ -1192,13 +1249,13 @@ (Typed ([ IsIn "Show" - [ TVar (TV 31 Star) ] + [ TVar (TV 41 Star) ] (Just (Area (Loc 0 0 0) (Loc 0 0 0))) ] :=> - TVar (TV 31 Star)) + TVar (TV 41 Star)) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "a0" False)) True) @@ -1219,7 +1276,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star)))) + (TVar (TV 41 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -1229,7 +1286,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (PCon "Nothing" [])) (Typed @@ -1247,7 +1304,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star)))) + (TVar (TV 41 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 0 0 0) (Loc 0 0 0)) (Is @@ -1257,7 +1314,7 @@ (TCon (TC "Maybe" (Kfun Star Star)) "Module.mad") - (TVar (TV 31 Star))) + (TVar (TV 41 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) PAny) (Typed diff --git a/.snapshots/should_fail_to_resolve_patterns_of_different_types_for_list_items/golden b/.snapshots/should_fail_to_resolve_patterns_of_different_types_for_list_items/golden index 1846e9fdf..247d31f83 100644 --- a/.snapshots/should_fail_to_resolve_patterns_of_different_types_for_list_items/golden +++ b/.snapshots/should_fail_to_resolve_patterns_of_different_types_for_list_items/golden @@ -9,103 +9,177 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 0 1 1) (Loc 63 4 2)) (Assignment "x" (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TVar (TV 9 Star) ] Nothing + , IsIn "Number" [ TVar (TV 10 Star) ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 4 1 5) (Loc 63 4 2)) (Where (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 10 1 11) (Loc 25 1 26)) (ListConstructor [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 11 1 12) (Loc 12 1 13)) (ListItem (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 11 1 12) (Loc 12 1 13)) (LNum "1"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 14 1 15) (Loc 15 1 16)) (ListItem (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 14 1 15) (Loc 15 1 16)) (LNum "2"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 17 1 18) (Loc 18 1 19)) (ListItem (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 17 1 18) (Loc 18 1 19)) (LNum "3"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 20 1 21) (Loc 21 1 22)) (ListItem (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 20 1 21) (Loc 21 1 22)) (LNum "5"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 23 1 24) (Loc 24 1 25)) (ListItem (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 23 1 24) (Loc 24 1 25)) (LNum "8"))) ])) [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TVar (TV 9 Star) ] Nothing + , IsIn "Number" [ TVar (TV 10 Star) ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "String" Star) "prelude")) (Area (Loc 31 2 3) (Loc 45 2 17)) (Is (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 31 2 3) (Loc 40 2 12)) (PList [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TVar (TV 9 Star) ] Nothing + , IsIn "Number" [ TVar (TV 9 Star) ] Nothing + ] :=> + TVar (TV 9 Star)) (Area (Loc 32 2 4) (Loc 33 2 5)) (PNum "1") , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TVar (TV 10 Star) ] Nothing + , IsIn "Number" [ TVar (TV 10 Star) ] Nothing + ] :=> + TVar (TV 10 Star)) (Area (Loc 35 2 7) (Loc 36 2 8)) (PNum "2") , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + , IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 38 2 10) (Loc 39 2 11)) (PNum "3") ])) (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn "Number" [ TCon (TC "String" Star) "prelude" ] Nothing + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 44 2 16) (Loc 45 2 17)) (LNum "1"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "String" Star) "prelude")) (Area (Loc 48 3 3) (Loc 61 3 16)) (Is (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 48 3 3) (Loc 56 3 11)) (PList [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 49 3 4) (Loc 52 3 7)) (PStr "1") , Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 54 3 9) (Loc 55 3 10)) (PVar "n") ])) (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> TCon (TC "String" Star) "prelude") (Area (Loc 60 3 15) (Loc 61 3 16)) (Var "n" False))) ]))) diff --git a/.snapshots/should_fail_when_no_instance_is_found/golden b/.snapshots/should_fail_when_no_instance_is_found/golden index 15c87dc46..99e3ae1a9 100644 --- a/.snapshots/should_fail_when_no_instance_is_found/golden +++ b/.snapshots/should_fail_when_no_instance_is_found/golden @@ -9,32 +9,75 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 380 23 1) (Loc 409 25 2)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 380 23 1) (Loc 409 25 2)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 387 23 8) (Loc 409 25 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 408 25 1) (Loc 408 25 1)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Inspect" + [ TCon (TC "Integer" Star) "prelude" ] + (Just (Area (Loc 397 24 3) (Loc 404 24 10))) + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 397 24 3) (Loc 407 24 13)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Inspect" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "Integer" Star) "prelude")) + (TCon (TC "String" Star) "prelude")) (Area (Loc 397 24 3) (Loc 404 24 10)) (Var "inspect" False)) (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Inspect" + [ TCon (TC "Integer" Star) "prelude" ] + (Just (Area (Loc 397 24 3) (Loc 404 24 10))) + , IsIn "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 405 24 11) (Loc 406 24 12)) (LNum "3")) True) @@ -328,15 +371,15 @@ (TApp (TApp (TCon (TC "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star)))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 298 20 3) (Loc 376 20 81)) (Assignment "inspect" (Typed - ([ IsIn "Inspect" [ TVar (TV 12 Star) ] Nothing - , IsIn "Inspect" [ TVar (TV 13 Star) ] Nothing + ([ IsIn "Inspect" [ TVar (TV 17 Star) ] Nothing + , IsIn "Inspect" [ TVar (TV 18 Star) ] Nothing ] :=> TApp (TApp @@ -345,8 +388,8 @@ (TApp (TCon (TC "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star)))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 308 20 13) (Loc 376 20 81)) (Abs @@ -361,7 +404,7 @@ (Just (Area (Loc 346 20 51) (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) , IsIn "Semigroup" @@ -373,15 +416,15 @@ (Just (Area (Loc 368 20 73) (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) ] :=> TApp (TApp (TCon (TC "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) "__W__1") [ Typed @@ -395,7 +438,7 @@ (Just (Area (Loc 346 20 51) (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) , IsIn "Semigroup" @@ -407,7 +450,7 @@ (Just (Area (Loc 368 20 73) (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) ] :=> TCon (TC "String" Star) "prelude") @@ -420,8 +463,8 @@ (TCon (TC "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star))) (Area (Loc 0 0 0) (Loc 0 0 0)) (Var "__W__1" False)) [ Typed @@ -435,7 +478,7 @@ (Just (Area (Loc 346 20 51) (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) , IsIn "Semigroup" @@ -447,7 +490,7 @@ (Just (Area (Loc 368 20 73) (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) ] :=> TApp @@ -462,8 +505,8 @@ "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star)))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star)))) (TCon (TC "String" Star) "prelude")) (Area (Loc 316 20 21) (Loc 374 20 79)) (Is @@ -476,46 +519,46 @@ "(,)" (Kfun Star (Kfun Star Star))) "prelude") - (TVar (TV 12 Star))) - (TVar (TV 13 Star))) + (TVar (TV 17 Star))) + (TVar (TV 18 Star))) (Area (Loc 316 20 21) (Loc 323 20 28)) (PTuple [ Typed ([ IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) ] :=> - TVar (TV 12 Star)) + TVar (TV 17 Star)) (Area (Loc 318 20 23) (Loc 319 20 24)) (PVar "a") , Typed ([ IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) ] :=> - TVar (TV 13 Star)) + TVar (TV 18 Star)) (Area (Loc 321 20 26) (Loc 322 20 27)) (PVar "b") ])) @@ -532,7 +575,7 @@ (Area (Loc 346 20 51) (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) (Loc 342 20 47))) , IsIn @@ -547,7 +590,7 @@ (Area (Loc 368 20 73) (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) (Loc 364 20 69))) ] :=> @@ -651,7 +694,7 @@ (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) @@ -672,7 +715,7 @@ (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) @@ -694,7 +737,7 @@ (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) @@ -777,7 +820,7 @@ (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) @@ -793,7 +836,7 @@ (Typed ([ IsIn "Inspect" - [ TVar (TV 12 Star) + [ TVar (TV 17 Star) ] Nothing ] :=> @@ -810,7 +853,7 @@ "prelude") (TVar (TV - 12 Star))) + 17 Star))) (TCon (TC "String" @@ -823,7 +866,7 @@ (Typed ([ IsIn "Inspect" - [ TVar (TV 12 Star) + [ TVar (TV 17 Star) ] (Just (Area @@ -834,7 +877,7 @@ 20 47))) ] :=> - TVar (TV 12 Star)) + TVar (TV 17 Star)) (Area (Loc 343 20 48) (Loc 344 20 49)) @@ -854,7 +897,7 @@ (Loc 348 20 53))) , IsIn "Inspect" - [ TVar (TV 12 Star) ] + [ TVar (TV 17 Star) ] (Just (Area (Loc 335 20 40) @@ -881,7 +924,7 @@ (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) @@ -1026,7 +1069,7 @@ (Loc 370 20 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) ] + [ TVar (TV 18 Star) ] (Just (Area (Loc 357 20 62) @@ -1058,7 +1101,7 @@ 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) + [ TVar (TV 18 Star) ] (Just (Area @@ -1171,7 +1214,7 @@ "Inspect" [ TVar (TV - 13 + 18 Star) ] (Just @@ -1200,7 +1243,7 @@ "Inspect" [ TVar (TV - 13 + 18 Star) ] Nothing @@ -1218,7 +1261,7 @@ "prelude") (TVar (TV - 13 + 18 Star))) (TCon (TC @@ -1242,7 +1285,7 @@ "Inspect" [ TVar (TV - 13 + 18 Star) ] (Just @@ -1258,7 +1301,7 @@ ] :=> TVar (TV - 13 + 18 Star)) (Area (Loc @@ -1293,7 +1336,7 @@ 75))) , IsIn "Inspect" - [ TVar (TV 13 Star) + [ TVar (TV 18 Star) ] (Just (Area diff --git a/.snapshots/should_fail_when_spreading_a_non_spreadable_type_into_a_record/golden b/.snapshots/should_fail_when_spreading_a_non_spreadable_type_into_a_record/golden index e4872836c..95917dbec 100644 --- a/.snapshots/should_fail_when_spreading_a_non_spreadable_type_into_a_record/golden +++ b/.snapshots/should_fail_when_spreading_a_non_spreadable_type_into_a_record/golden @@ -9,41 +9,102 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 0 1 1) (Loc 31 1 32)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 0 1 1) (Loc 31 1 32)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 7 1 8) (Loc 31 1 32)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 30 1 31) (Loc 30 1 31)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TRecord (fromList []) (Just (TVar (TV 4 Star))) (fromList []) + ] + Nothing + ] :=> + TRecord + (fromList [ ( "x" , TCon (TC "Integer" Star) "prelude" ) ]) + (Just (TVar (TV 4 Star))) + (fromList [])) (Area (Loc 15 1 16) (Loc 29 1 30)) (Record [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" + [ TRecord + (fromList []) (Just (TVar (TV 4 Star))) (fromList []) + ] + Nothing + ] :=> + TRecord + (fromList []) (Just (TVar (TV 4 Star))) (fromList [])) (Area (Loc 17 1 18) (Loc 21 1 22)) (FieldSpread (Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Number" + [ TRecord + (fromList []) + (Just (TVar (TV 4 Star))) + (fromList []) + ] + Nothing + ] :=> + TRecord + (fromList []) + (Just (TVar (TV 4 Star))) + (fromList [])) (Area (Loc 20 1 21) (Loc 21 1 22)) (LNum "3"))) , Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Number" [ TCon (TC "Integer" Star) "prelude" ] Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 23 1 24) (Loc 27 1 28)) (Field ( "x" , Typed - ([] :=> TVar (TV 0 Star)) + ([ IsIn + "Number" + [ TCon (TC "Integer" Star) "prelude" ] + Nothing + ] :=> + TCon (TC "Integer" Star) "prelude") (Area (Loc 26 1 27) (Loc 27 1 28)) (LNum "1") )) @@ -75,7 +136,651 @@ ] , atypedecls = [] , ainterfaces = [] - , ainstances = [] + , ainstances = + [ Untyped + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Instance + "Eq" + [ IsIn "Eq" [ TVar (TV 204274412242036023 Star) ] Nothing ] + (IsIn + "Eq" + [ TRecord + (fromList [ ( "x" , TVar (TV 204274412242036023 Star) ) ]) + Nothing + (fromList []) + ] + Nothing) + (fromList + [ ( "==" + , ( Typed + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 16 Star) ) ]))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 16 Star) ) ]))) + (TCon (TC "Boolean" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Assignment + "==" + (Typed + ([ IsIn "Eq" [ TVar (TV 16 Star) ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList []))) + (TCon (TC "Boolean" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 16 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$a__") + [ Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) + "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 16 Star) ) ]))) + (TCon (TC "Boolean" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "x" , TVar (TV 16 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 16 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$b__") + [ Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "Boolean" Star) "prelude")) + (TCon (TC "Boolean" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TCon + (TC "Boolean" Star) "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TCon + (TC "Boolean" Star) + "prelude")) + (TCon + (TC "Boolean" Star) + "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "&&" False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just + (Area + (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TVar (TV 16 Star))) + (TCon + (TC "Boolean" Star) + "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TVar (TV 16 Star))) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TVar + (TV 16 Star))) + (TCon + (TC "Boolean" Star) + "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "==" False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just + (Area + (Loc 0 0 0) + (Loc 0 0 0))) + ] :=> + TVar (TV 16 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ])) + (Area + (Loc 0 0 0) + (Loc 0 0 0)) + (Var "__$a__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ]))) + (TVar + (TV 16 Star))) + (Area + (Loc 0 0 0) + (Loc 0 0 0)) + (Var ".x" False)))) + False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just + (Area + (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TVar (TV 16 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "x" + , TVar (TV 16 Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar (TV 16 Star) + ) + ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "__$b__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun + Star + Star))) + "prelude") + (TRecord + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar + (TV + 16 + Star) + ) + ]))) + (TVar (TV 16 Star))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var ".x" False)))) + True)) + False)) + (Typed + ([ IsIn + "Eq" + [ TVar (TV 16 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "Boolean" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LBool "true")) + True) + ]) + ]))) + , Forall + [ Star ] + ([ IsIn "Eq" [ TGen 0 ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord (fromList [ ( "x" , TGen 0 ) ]) Nothing (fromList []))) + (TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TGen 0 ) ]) Nothing (fromList []))) + (TCon (TC "Boolean" Star) "prelude"))) + ) + ) + ])) + , Untyped + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Instance + "Show" + [ IsIn "Show" [ TVar (TV 204274412242036023 Star) ] Nothing ] + (IsIn + "Show" + [ TRecord + (fromList [ ( "x" , TVar (TV 204274412242036023 Star) ) ]) + Nothing + (fromList []) + ] + Nothing) + (fromList + [ ( "show" + , ( Typed + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 27 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 27 Star) ) ]))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Assignment + "show" + (Typed + ([ IsIn "Show" [ TVar (TV 27 Star) ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord + (fromList [ ( "x" , TVar (TV 27 Star) ) ]) + Nothing + (fromList []))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Abs + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 27 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TRecord + (fromList [ ( "x" , TVar (TV 27 Star) ) ]) + Nothing + (fromList [ ( "x" , TVar (TV 27 Star) ) ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + "__$a__") + [ Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (TemplateString + [ Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr "{ ") + , Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 27 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun Star (Kfun Star Star))) + "prelude") + (TCon (TC "String" Star) "prelude")) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + Nothing + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TCon + (TC "String" Star) "prelude")) + (TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TCon + (TC "String" Star) + "prelude")) + (TCon + (TC "String" Star) "prelude"))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "mappend" False)) + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr "x: ")) + False)) + (Typed + ([ IsIn + "Monoid" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Semigroup" + [ TCon (TC "String" Star) "prelude" ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + , IsIn + "Show" + [ TVar (TV 27 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (App + (Typed + ([ IsIn + "Show" [ TVar (TV 27 Star) ] Nothing + ] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star (Kfun Star Star))) + "prelude") + (TVar (TV 27 Star))) + (TCon (TC "String" Star) "prelude")) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "show" False)) + (Typed + ([ IsIn + "Show" + [ TVar (TV 27 Star) ] + (Just (Area (Loc 0 0 0) (Loc 0 0 0))) + ] :=> + TVar (TV 27 Star)) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Access + (Typed + ([] :=> + TRecord + (fromList + [ ( "x" + , TVar (TV 27 Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar (TV 27 Star) + ) + ])) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var "__$a__" False)) + (Typed + ([] :=> + TApp + (TApp + (TCon + (TC + "(->)" + (Kfun + Star + (Kfun Star Star))) + "prelude") + (TRecord + (fromList + [ ( "x" + , TVar (TV 27 Star) + ) + ]) + Nothing + (fromList + [ ( "x" + , TVar (TV 27 Star) + ) + ]))) + (TVar (TV 27 Star))) + (Area (Loc 0 0 0) (Loc 0 0 0)) + (Var ".x" False)))) + True)) + True) + , Typed + ([] :=> TCon (TC "String" Star) "prelude") + (Area (Loc 0 0 0) (Loc 0 0 0)) + (LStr " }") + ]) + ]))) + , Forall + [ Star ] + ([ IsIn "Show" [ TGen 0 ] Nothing ] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TRecord (fromList [ ( "x" , TGen 0 ) ]) Nothing (fromList []))) + (TCon (TC "String" Star) "prelude")) + ) + ) + ])) + ] , apath = Just "Module.mad" } , [] diff --git a/.snapshots/should_fail_when_the_type_is_ambiguous/golden b/.snapshots/should_fail_when_the_type_is_ambiguous/golden index 4b4e5f294..86ecfbd7b 100644 --- a/.snapshots/should_fail_when_the_type_is_ambiguous/golden +++ b/.snapshots/should_fail_when_the_type_is_ambiguous/golden @@ -9,32 +9,72 @@ ] , aexps = [ Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 113 9 1) (Loc 141 11 2)) (TypedExp (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 113 9 1) (Loc 141 11 2)) (Assignment "main" (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TApp + (TCon (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude"))) + (TCon (TC "{}" Star) "prelude")) (Area (Loc 120 9 8) (Loc 141 11 2)) (Abs (Typed - ([] :=> TVar (TV (-1) Star)) + ([] :=> + TApp + (TCon (TC "List" (Kfun Star Star)) "prelude") + (TCon (TC "String" Star) "prelude")) (Area (Loc 140 11 1) (Loc 140 11 1)) "_") [ Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn + "Read" + [ TVar (TV 2 Star) ] + (Just (Area (Loc 130 10 3) (Loc 134 10 7))) + ] :=> + TVar (TV 2 Star)) (Area (Loc 130 10 3) (Loc 139 10 12)) (App (Typed - ([] :=> TVar (TV (-1) Star)) + ([ IsIn "Read" [ TVar (TV 2 Star) ] Nothing ] :=> + TApp + (TApp + (TCon + (TC "(->)" (Kfun Star (Kfun Star Star))) "prelude") + (TCon (TC "String" Star) "prelude")) + (TVar (TV 2 Star))) (Area (Loc 130 10 3) (Loc 134 10 7)) (Var "read" False)) (Typed - ([] :=> TCon (TC "String" Star) "prelude") + ([ IsIn + "Read" + [ TVar (TV 2 Star) ] + (Just (Area (Loc 130 10 3) (Loc 134 10 7))) + ] :=> + TCon (TC "String" Star) "prelude") (Area (Loc 135 10 8) (Loc 138 10 11)) (LStr "3")) True) diff --git a/compiler/main/Driver.hs b/compiler/main/Driver.hs index 43d167755..e52f8a5b7 100644 --- a/compiler/main/Driver.hs +++ b/compiler/main/Driver.hs @@ -51,6 +51,8 @@ import Control.Concurrent (threadDelay, forkIO, Thre import qualified Control.FoldDebounce as Debounce import System.FSNotify import Data.Time.Clock +import qualified AST.Source as Src +import Data.Maybe (isJust) diff --git a/compiler/main/Infer/Exp.hs b/compiler/main/Infer/Exp.hs index 7de7a5316..786adde81 100644 --- a/compiler/main/Infer/Exp.hs +++ b/compiler/main/Infer/Exp.hs @@ -57,8 +57,8 @@ makeMutationPred :: Type -> Area -> Pred makeMutationPred t area = IsIn mutationInterface [t] (Just area) -infer :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -infer options env lexp = do +infer :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +infer discardError options env lexp = do let (Can.Canonical area exp) = lexp case exp of Can.LNum _ -> do @@ -74,25 +74,25 @@ infer options env lexp = do Can.LChar _ -> return (M.empty, [], tChar, applyLitSolve lexp ([] :=> tChar)) Can.LBool _ -> return (M.empty, [], tBool, applyLitSolve lexp ([] :=> tBool)) Can.LUnit -> return (M.empty, [], tUnit, applyLitSolve lexp ([] :=> tUnit)) - Can.TemplateString _ -> inferTemplateString options env lexp - - Can.Var _ -> inferVar options env lexp - Can.Abs _ _ -> inferAbs options env lexp - Can.App{} -> inferApp options env lexp - Can.Assignment _ _ -> inferAssignment options env lexp - Can.Mutate _ _ -> inferMutate options env lexp - Can.Do _ -> inferDo options env lexp - Can.Where _ _ -> inferWhere options env lexp - Can.Record _ -> inferRecord options env lexp - Can.Access _ _ -> inferAccess options env lexp - Can.ArrayAccess _ _ -> inferArrayAccess options env lexp - Can.TypedExp{} -> inferTypedExp options env lexp - Can.ListConstructor _ -> inferListConstructor options env lexp - Can.TupleConstructor _ -> inferTupleConstructor options env lexp - Can.Export _ -> inferExport options env lexp + Can.TemplateString _ -> inferTemplateString discardError options env lexp + + Can.Var _ -> inferVar discardError options env lexp + Can.Abs _ _ -> inferAbs discardError options env lexp + Can.App{} -> inferApp discardError options env lexp + Can.Assignment _ _ -> inferAssignment discardError options env lexp + Can.Mutate _ _ -> inferMutate discardError options env lexp + Can.Do _ -> inferDo discardError options env lexp + Can.Where _ _ -> inferWhere discardError options env lexp + Can.Record _ -> inferRecord discardError options env lexp + Can.Access _ _ -> inferAccess discardError options env lexp + Can.ArrayAccess _ _ -> inferArrayAccess discardError options env lexp + Can.TypedExp{} -> inferTypedExp discardError options env lexp + Can.ListConstructor _ -> inferListConstructor discardError options env lexp + Can.TupleConstructor _ -> inferTupleConstructor discardError options env lexp + Can.Export _ -> inferExport discardError options env lexp Can.NameExport _ -> inferNameExport env lexp - Can.If{} -> inferIf options env lexp - Can.While{} -> inferWhile options env lexp + Can.If{} -> inferIf discardError options env lexp + Can.While{} -> inferWhile discardError options env lexp Can.Extern{} -> inferExtern env lexp Can.TypedHole -> do t <- newTVar Star @@ -166,8 +166,8 @@ updatePattern qt (Can.Canonical area pat) = case pat of -- INFER VAR -inferVar :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferVar _ env exp@(Can.Canonical area (Can.Var n)) = case n of +inferVar :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferVar discardError _ env exp@(Can.Canonical area (Can.Var n)) = case n of ('.' : name) -> do let s = Forall [Star, Star] $ [] :=> (TRecord (M.fromList [(name, TGen 0)]) (Just $ TGen 1) mempty `fn` TGen 0) (ps :=> t) <- instantiate s @@ -215,12 +215,12 @@ extendAbsEnv env tv (Can.Canonical area param) = if param `elem` allowedShadows (((const $ extendVars env (param, Forall [] ([] :=> tv))) <$>) . pushError . upgradeContext' env area) -inferAbs :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferAbs options env l@(Can.Canonical _ (Can.Abs p@(Can.Canonical area param) body)) = do +inferAbs :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferAbs discardError options env l@(Can.Canonical _ (Can.Abs p@(Can.Canonical area param) body)) = do tv <- newTVar Star env' <- extendAbsEnv env tv p - (s, ps, t, es) <- inferBody options env' { envInBody = True } body - (s', es') <- postProcessBody options env' s (tv `fn` t) es + (s, ps, t, es) <- inferBody discardError options env' { envInBody = True } body + (s', es') <- postProcessBody discardError options env' s (tv `fn` t) es let t' = apply s' (tv `fn` t) paramType = apply s' tv @@ -228,22 +228,22 @@ inferAbs options env l@(Can.Canonical _ (Can.Abs p@(Can.Canonical area param) bo return (s', apply s' ps, t', applyAbsSolve l (Slv.Typed (apply s' $ ps :=> paramType) area param) es' (apply s' $ ps :=> t')) -inferBody :: Options -> Env -> [Can.Exp] -> Infer (Substitution, [Pred], Type, [Slv.Exp]) -inferBody options env [e] = do - (s, ps, t, e') <- infer options env e +inferBody :: Bool -> Options -> Env -> [Can.Exp] -> Infer (Substitution, [Pred], Type, [Slv.Exp]) +inferBody discardError options env [e] = do + (s, ps, t, e') <- infer discardError options env e return (s, ps, t, [e']) -inferBody options env (e : es) = do - (s, (returnPreds, _), env', e') <- inferImplicitlyTyped options True env e - (sb, ps', tb, eb) <- inferBody options (apply s env') es +inferBody discardError options env (e : es) = do + (s, (returnPreds, _), env', e') <- inferImplicitlyTyped discardError options True env e + (sb, ps', tb, eb) <- inferBody discardError options (apply s env') es let finalS = s `compose` (sb `compose` s) return (finalS, apply finalS $ returnPreds ++ ps', tb, e' : eb) -- TODO: find out and comment why we need this -postProcessBody :: Options -> Env -> Substitution -> Type -> [Slv.Exp] -> Infer (Substitution, [Slv.Exp]) -postProcessBody options env s expType es = do +postProcessBody :: Bool -> Options -> Env -> Substitution -> Type -> [Slv.Exp] -> Infer (Substitution, [Slv.Exp]) +postProcessBody discardError options env s expType es = do (es', s', _) <- foldM (\(results, accSubst, env'') (Slv.Typed (ps' :=> t') area e) -> do let fs = ftv (apply accSubst env'') `List.union` ftv (apply accSubst expType) `List.union` ftvForLetGen (apply accSubst t') @@ -260,6 +260,7 @@ postProcessBody options env s expType es = do let solvedPs = catMaybes prep let unsolvedPs = ps'' \\ solvedPs + -- if ambiguities fs unsolvedPs /= [] && not discardError then do if ambiguities fs unsolvedPs /= [] then do (sDef, unsolvedPs') <- tryDefaults env unsolvedPs (sDef', unsolvedPs'') <- tryDefaults env (apply sDef unsolvedPs') @@ -270,6 +271,9 @@ postProcessBody options env s expType es = do catchError (byInst env (apply subst p)) (\case + _ | discardError -> + return [] + (CompilationError FatalError NoContext) -> if ambiguities fs unsolvedPs'' /= [] then case p of @@ -307,11 +311,11 @@ postProcessBody options env s expType es = do -- INFER APP -inferApp :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferApp options env (Can.Canonical area (Can.App abs@(Can.Canonical absArea _) arg@(Can.Canonical argArea _) final)) = do +inferApp :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferApp discardError options env (Can.Canonical area (Can.App abs@(Can.Canonical absArea _) arg@(Can.Canonical argArea _) final)) = do tv <- newTVar Star - (s1, ps1, t1, eabs) <- infer options env abs - (s2, ps2, t2, earg) <- infer options (apply s1 env) arg + (s1, ps1, t1, eabs) <- infer discardError options env abs + (s2, ps2, t2, earg) <- infer discardError options (apply s1 env) arg let expForContext = if getLineFromStart argArea < getLineFromStart absArea then @@ -319,7 +323,8 @@ inferApp options env (Can.Canonical area (Can.App abs@(Can.Canonical absArea _) else arg - s3 <- contextualUnify env expForContext (apply s2 t1) (apply s1 t2 `fn` tv) + s3 <- contextualUnify' env discardError expForContext (apply s2 t1) (apply s1 t2 `fn` tv) + let t = apply s3 tv let s = s3 `compose` s2 `compose` s1 @@ -331,16 +336,16 @@ inferApp options env (Can.Canonical area (Can.App abs@(Can.Canonical absArea _) -- INFER TEMPLATE STRINGS -inferTemplateString :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferTemplateString options env (Can.Canonical area (Can.TemplateString exps)) = do - inferred <- mapM (infer options env) exps +inferTemplateString :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferTemplateString discardError options env (Can.Canonical area (Can.TemplateString exps)) = do + inferred <- mapM (infer discardError options env) exps let elemSubsts = (\(s, _, _, _) -> s) <$> inferred let elemTypes = (\(_, _, t, _) -> t) <$> inferred let elemExps = (\(_, _, _, es) -> es) <$> inferred let elemPS = (\(_, ps, _, _) -> ps) <$> inferred - ss <- mapM (\(exp, t) -> contextualUnify env exp t tStr) (zip exps elemTypes) + ss <- mapM (\(exp, t) -> contextualUnify' env discardError exp t tStr) (zip exps elemTypes) let fullSubst = foldl' compose M.empty (elemSubsts <> ss) @@ -357,9 +362,9 @@ inferTemplateString options env (Can.Canonical area (Can.TemplateString exps)) = -- INFER ASSIGNMENT -inferAssignment :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferAssignment options env e@(Can.Canonical area (Can.Assignment name exp)) = do - when (name `Set.member` envNamespacesInScope env) $ do +inferAssignment :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferAssignment discardError options env e@(Can.Canonical area (Can.Assignment name exp)) = do + when (name `Set.member` envNamespacesInScope env && not discardError) $ do pushError $ CompilationError (NameAlreadyDefined name) (Context (envCurrentPath env) area) currentScheme <- case M.lookup name (envVars env) of @@ -372,14 +377,14 @@ inferAssignment options env e@(Can.Canonical area (Can.Assignment name exp)) = d (currentPreds :=> currentType) <- instantiate currentScheme let env' = extendVars env (name, currentScheme) - (s1, ps1, t1, e1) <- infer options env' exp + (s1, ps1, t1, e1) <- infer discardError options env' exp s2 <- catchError (contextualUnify env' e currentType t1) (const $ return M.empty) -- ^ We can skip this error as we mainly need the substitution. It would fail in inferExplicitlyTyped anyways. let s = s1 `compose` s2 let t2 = apply s t1 mutationPs <- - if name `Set.member` envNamesInScope env && envInBody env then do + if name `Set.member` envNamesInScope env && envInBody env && not discardError then do pushError $ CompilationError BadMutation (Context (envCurrentPath env) area) return [] else @@ -391,19 +396,25 @@ inferAssignment options env e@(Can.Canonical area (Can.Assignment name exp)) = d -- INFER MUTATE -inferMutate :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferMutate options env e@(Can.Canonical area (Can.Mutate lhs exp)) = do - (s1, ps1, t1, e1) <- infer options env lhs - (s2, ps2, t2, e2) <- infer options (apply s1 env) exp - s3 <- contextualUnify env e t1 t2 - -- s3 <- catchError (contextualUnify env e t1 t2) (const $ return M.empty) - -- ^ We can skip this error as we mainly need the substitution. It would fail in inferExplicitlyTyped anyways. +inferMutate :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferMutate discardError options env e@(Can.Canonical area (Can.Mutate lhs exp)) = do + (s1, ps1, t1, e1) <- infer discardError options env lhs + (s2, ps2, t2, e2) <- infer discardError options (apply s1 env) exp + s3 <- catchError + (contextualUnify env e t1 t2) + (\err -> do + if discardError then do + return mempty + else + throwError err + ) + let s = s1 `compose` s2 `compose` s3 let t3 = apply s t2 mutationPs <- case Can.getExpName lhs of - Just name -> + Just name | not discardError -> if name `Set.member` envNamesInScope env && envInBody env then return [makeMutationPred (apply s t3) area] else @@ -423,17 +434,17 @@ inferMutate options env e@(Can.Canonical area (Can.Mutate lhs exp)) = do -- INFER EXPORT -inferExport :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferExport options env (Can.Canonical area (Can.Export exp)) = do - (s, ps, t, e) <- infer options env exp +inferExport :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferExport discardError options env (Can.Canonical area (Can.Export exp)) = do + (s, ps, t, e) <- infer discardError options env exp return (s, ps, t, Slv.Typed (ps :=> t) area (Slv.Export e)) -- INFER LISTCONSTRUCTOR -inferListConstructor :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferListConstructor options env listExp@(Can.Canonical area (Can.ListConstructor elems)) = case elems of +inferListConstructor :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferListConstructor discardError options env listExp@(Can.Canonical area (Can.ListConstructor elems)) = case elems of [] -> do tv <- newTVar Star let t = tListOf tv @@ -444,13 +455,14 @@ inferListConstructor options env listExp@(Can.Canonical area (Can.ListConstructo (s', ps, t', es) <- foldlM (\(s, pss, t, lis) elem -> do - (s', ps', t'', li) <- inferListItem options (apply s env) (fromMaybe tv t) elem + (s', ps', t'', li) <- inferListItem discardError options (apply s env) (fromMaybe tv t) elem (s'', tr) <- case t of Nothing -> return (mempty, t'') - Just t''' -> - (, pickJSXChild t''' t'') <$> contextualUnify env elem (apply s' t''') t'' + Just t''' -> do + s'''' <- contextualUnify' env discardError elem (apply s' t''') t'' + return (s'''', pickJSXChild t''' t'') let s''' = s'' `compose` s' `compose` s return (s''', pss ++ ps', Just $ apply s''' tr, lis ++ [li]) @@ -460,7 +472,7 @@ inferListConstructor options env listExp@(Can.Canonical area (Can.ListConstructo let (Just t'') = t' - s'' <- contextualUnify env listExp tv t'' + s'' <- contextualUnify' env discardError listExp tv t'' let s''' = s'' `compose` s' let t = tListOf (apply s''' tv) @@ -468,16 +480,16 @@ inferListConstructor options env listExp@(Can.Canonical area (Can.ListConstructo return (s''', ps, t, Slv.Typed (ps :=> t) area (Slv.ListConstructor es)) -inferListItem :: Options -> Env -> Type -> Can.ListItem -> Infer (Substitution, [Pred], Type, Slv.ListItem) -inferListItem options env _ (Can.Canonical area li) = case li of +inferListItem :: Bool -> Options -> Env -> Type -> Can.ListItem -> Infer (Substitution, [Pred], Type, Slv.ListItem) +inferListItem discardError options env _ (Can.Canonical area li) = case li of Can.ListItem exp -> do - (s1, ps, t, e) <- infer options env exp + (s1, ps, t, e) <- infer discardError options env exp return (s1, ps, t, Slv.Typed (ps :=> t) area $ Slv.ListItem e) Can.ListSpread exp -> do - (s1, ps, t, e) <- infer options env exp + (s1, ps, t, e) <- infer discardError options env exp tv <- newTVar Star - s2 <- contextualUnify env exp (tListOf tv) t + s2 <- contextualUnify' env discardError exp (tListOf tv) t let s = s1 `compose` s2 @@ -496,12 +508,12 @@ pickJSXChild t1 t2 = case (t1, t2) of -- INFER TUPLE CONSTRUCTOR -inferTupleConstructor :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferTupleConstructor options env (Can.Canonical area (Can.TupleConstructor elems)) = do +inferTupleConstructor :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferTupleConstructor discardError options env (Can.Canonical area (Can.TupleConstructor elems)) = do inferredElems <- foldM (\(s, ps, ts, es) e -> do - (s', ps', t', e') <- infer options (apply s env) e + (s', ps', t', e') <- infer discardError options (apply s env) e return (s' `compose` s, ps ++ ps', ts ++ [t'], es ++ [e']) ) (M.empty, [], [], []) elems @@ -519,13 +531,13 @@ inferTupleConstructor options env (Can.Canonical area (Can.TupleConstructor elem -- INFER RECORD -inferRecord :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferRecord options env exp = do +inferRecord :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferRecord discardError options env exp = do let Can.Canonical area (Can.Record fields) = exp (subst, inferredFields) <- foldM ( \(fieldSubst, result) field -> do - (s, ps, ts, e) <- inferRecordField options (apply fieldSubst env) field + (s, ps, ts, e) <- inferRecordField discardError options (apply fieldSubst env) field let nextSubst = s `compose` fieldSubst return (nextSubst, result ++ [(ps, (\(n, t) -> (n, apply nextSubst t)) <$> ts, e)]) ) (mempty, []) fields @@ -546,7 +558,7 @@ inferRecord options env exp = do Just tBase -> do baseVar <- newTVar Star - s <- contextualUnify env exp (apply subst tBase) (TRecord mempty (Just baseVar) mempty) + s <- contextualUnify' env discardError exp (apply subst tBase) (TRecord mempty (Just baseVar) mempty) -- return (TRecord (M.fromList fieldTypes') (Just baseVar) mempty, s) return (TRecord (M.fromList fieldTypes') (Just tBase) mempty, s) @@ -559,14 +571,14 @@ inferRecord options env exp = do return (finalSubst, allPS, apply finalSubst recordType, Slv.Typed (allPS :=> recordType) area (Slv.Record fieldEXPS)) -inferRecordField :: Options -> Env -> Can.Field -> Infer (Substitution, [Pred], [(Slv.Name, Type)], Slv.Field) -inferRecordField options env (Can.Canonical area field) = case field of +inferRecordField :: Bool -> Options -> Env -> Can.Field -> Infer (Substitution, [Pred], [(Slv.Name, Type)], Slv.Field) +inferRecordField discardError options env (Can.Canonical area field) = case field of Can.Field (name, exp) -> do - (s, ps, t, e) <- infer options env exp + (s, ps, t, e) <- infer discardError options env exp return (s, ps, [(name, t)], Slv.Typed (ps :=> t) area $ Slv.Field (name, e)) Can.FieldSpread exp -> do - (s, ps, t, e) <- infer options env exp + (s, ps, t, e) <- infer discardError options env exp case t of TRecord{} -> return (s, ps, [("...", t)], Slv.Typed (ps :=> t) area $ Slv.FieldSpread e) @@ -574,6 +586,9 @@ inferRecordField options env (Can.Canonical area field) = case field of TVar _ -> return (s, ps, [("...", t)], Slv.Typed (ps :=> t) area $ Slv.FieldSpread e) + _ | discardError -> + return (s, ps, [("...", t)], Slv.Typed (ps :=> t) area $ Slv.FieldSpread e) + _ -> throwError $ CompilationError (WrongSpreadType $ show t) @@ -583,29 +598,29 @@ inferRecordField options env (Can.Canonical area field) = case field of -- INFER ACCESS -inferAccess :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferAccess options env e@(Can.Canonical _ (Can.Access ns _)) = +inferAccess :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferAccess discardError options env e@(Can.Canonical _ (Can.Access ns _)) = case ns of Can.Canonical _ (Can.Var ns') -> if ns' `Set.member` envNamespacesInScope env then - inferNamespaceAccess options env e + inferNamespaceAccess discardError options env e else - inferFieldAccess options env e + inferFieldAccess discardError options env e _ -> - inferFieldAccess options env e + inferFieldAccess discardError options env e -- INFER ACCESS -inferArrayAccess :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferArrayAccess options env (Can.Canonical area (Can.ArrayAccess arr index)) = do +inferArrayAccess :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferArrayAccess discardError options env (Can.Canonical area (Can.ArrayAccess arr index)) = do tv <- newTVar Star - (s1, ps1, t1, earr) <- infer options env arr - (s2, ps2, t2, eindex) <- infer options env index - s3 <- contextualUnify env arr t1 (tArrayOf tv) - s4 <- contextualUnify env index t2 tInteger + (s1, ps1, t1, earr) <- infer discardError options env arr + (s2, ps2, t2, eindex) <- infer discardError options env index + s3 <- contextualUnify' env discardError arr t1 (tArrayOf tv) + s4 <- contextualUnify' env discardError index t2 tInteger let s = s4 `compose` s3 `compose` s2 `compose` s1 let t = apply s tv @@ -617,8 +632,8 @@ inferArrayAccess options env (Can.Canonical area (Can.ArrayAccess arr index)) = -- INFER NAMESPACE ACCESS -inferNamespaceAccess :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferNamespaceAccess _ env e@(Can.Canonical area (Can.Access (Can.Canonical _ (Can.Var ns)) (Can.Canonical _ (Can.Var field)))) +inferNamespaceAccess :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferNamespaceAccess discardError _ env e@(Can.Canonical area (Can.Access (Can.Canonical _ (Can.Var ns)) (Can.Canonical _ (Can.Var field)))) = do sc <- catchError @@ -630,24 +645,30 @@ inferNamespaceAccess _ env e@(Can.Canonical area (Can.Access (Can.Canonical _ (C let e = Slv.Typed (ps :=> t) area $ Slv.Var (ns <> field) (isConstructor env (ns <> field)) return (M.empty, ps', t, e) -inferNamespaceAccess _ _ _ = throwError $ CompilationError FatalError NoContext +inferNamespaceAccess _ _ _ _ = throwError $ CompilationError FatalError NoContext -- INFER FIELD ACCESS -inferFieldAccess :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferFieldAccess options env fa@(Can.Canonical area (Can.Access rec@(Can.Canonical _ _) abs)) +inferFieldAccess :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferFieldAccess discardError options env fa@(Can.Canonical area (Can.Access rec@(Can.Canonical _ _) abs)) = do tv <- newTVar Star - (s1, _ , t1, eabs) <- infer options env abs - (s2, ps2, t2, earg) <- infer options env rec - - s3 <- contextualUnifyAccess env fa t1 (t2 `fn` tv) - - let s = s3 `compose` s2 `compose` s1 - let t = apply s tv + (s1, _ , t1, eabs) <- infer discardError options env abs + (s2, ps2, t2, earg) <- infer discardError options env rec + + s3 <- catchError + (contextualUnifyAccess env fa t1 (t2 `fn` tv)) + (\err -> do + if discardError then do + return $ gentleUnify t1 (t2 `fn` tv) + else + throwError err + ) + let s = s3 `compose` s2 `compose` s1 + let t = apply s tv let solved = Slv.Typed (ps2 :=> t) area (Slv.Access earg eabs) return (s, ps2, t, solved) @@ -656,17 +677,16 @@ inferFieldAccess options env fa@(Can.Canonical area (Can.Access rec@(Can.Canonic -- INFER IF -inferIf :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferIf options env (Can.Canonical area (Can.If cond truthy falsy)) = do - (s1, ps1, tcond, econd) <- infer options env cond - (s2, ps2, ttruthy, etruthy) <- infer options (apply s1 env) truthy - (s3, ps3, tfalsy, efalsy) <- infer options (apply (s2 `compose` s1) env) falsy +inferIf :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferIf discardError options env (Can.Canonical area (Can.If cond truthy falsy)) = do + (s1, ps1, tcond, econd) <- infer discardError options env cond + (s2, ps2, ttruthy, etruthy) <- infer discardError options (apply s1 env) truthy + (s3, ps3, tfalsy, efalsy) <- infer discardError options (apply (s2 `compose` s1) env) falsy let tfalsy' = apply (s3 `compose` s2 `compose` s1) tfalsy let ttruthy' = apply (s3 `compose` s2 `compose` s1) ttruthy - s4 <- catchError (contextualUnify env falsy tfalsy' ttruthy') flipUnificationError - -- s4 <- catchError (contextualUnify env falsy ttruthy tfalsy) flipUnificationError - s5 <- contextualUnify env cond tBool (apply s4 tcond) + s4 <- catchError (contextualUnify' env discardError falsy tfalsy' ttruthy') flipUnificationError + s5 <- contextualUnify' env discardError cond tBool (apply s4 tcond) let s = s5 `compose` s4 `compose` s3 `compose` s2 `compose` s1 let t = apply s ttruthy @@ -677,15 +697,15 @@ inferIf options env (Can.Canonical area (Can.If cond truthy falsy)) = do -- INFER While -inferWhile :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferWhile options env (Can.Canonical area (Can.While cond body)) = do - (s1, ps1, tcond, econd) <- infer options env cond - (s2, ps2, tbody, ebody) <- infer options (apply s1 env) body +inferWhile :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferWhile discardError options env (Can.Canonical area (Can.While cond body)) = do + (s1, ps1, tcond, econd) <- infer discardError options env cond + (s2, ps2, tbody, ebody) <- infer discardError options (apply s1 env) body let s3 = s2 `compose` s1 - s4 <- contextualUnify env cond tBool (apply s3 tcond) - s5 <- contextualUnify env body tUnit (apply s3 tbody) + s4 <- contextualUnify' env discardError cond tBool (apply s3 tcond) + s5 <- contextualUnify' env discardError body tUnit (apply s3 tbody) let s = s5 `compose` s4 `compose` s3 `compose` s2 `compose` s1 let t = apply s tbody @@ -696,10 +716,10 @@ inferWhile options env (Can.Canonical area (Can.While cond body)) = do -- INFER DO -inferDo :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferDo options env (Can.Canonical area (Can.Do exps)) = do - (s, ps, t, exps') <- inferBody options env exps - (s', exps'') <- postProcessBody options env s t exps' +inferDo :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferDo discardError options env (Can.Canonical area (Can.Do exps)) = do + (s, ps, t, exps') <- inferBody discardError options env exps + (s', exps'') <- postProcessBody discardError options env s t exps' return (s', apply s' ps, apply s' t, Slv.Typed (apply s' $ ps :=> t) area (Slv.Do exps'')) @@ -707,13 +727,13 @@ inferDo options env (Can.Canonical area (Can.Do exps)) = do -- INFER WHERE -inferWhere :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferWhere options env (Can.Canonical area (Can.Where exp iss)) = do - (s, ps, t, e) <- infer options env exp +inferWhere :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferWhere discardError options env (Can.Canonical area (Can.Where exp iss)) = do + (s, ps, t, e) <- infer discardError options env exp tv <- newTVar Star (pss, issSubstitution) <- foldM (\(res, currSubst) is -> do - r@(subst, _, _) <- inferBranch options (apply currSubst env) (apply currSubst tv) t is + r@(subst, _, _) <- inferBranch discardError options (apply currSubst env) (apply currSubst tv) t is return (res <> [r], subst `compose` currSubst) ) ([], s) @@ -730,12 +750,12 @@ inferWhere options env (Can.Canonical area (Can.Where exp iss)) = do return (s'', ps ++ ps', apply s'' tv, wher) -inferBranch :: Options -> Env -> Type -> Type -> Can.Is -> Infer (Substitution, [Pred], Slv.Is) -inferBranch options env tv t (Can.Canonical area (Can.Is pat exp)) = do +inferBranch :: Bool -> Options -> Env -> Type -> Type -> Can.Is -> Infer (Substitution, [Pred], Slv.Is) +inferBranch discardError options env tv t (Can.Canonical area (Can.Is pat exp)) = do (pat', ps, vars, t') <- inferPattern env pat - s <- contextualUnify env exp t t' - (s', ps', t'', e') <- infer options (apply s $ mergeVars env vars) exp - s'' <- contextualUnify env exp tv (apply (s `compose` s') t'') + s <- contextualUnify' env discardError exp t t' + (s', ps', t'', e') <- infer discardError options (apply s $ mergeVars env vars) exp + s'' <- contextualUnify' env discardError exp tv (apply (s `compose` s') t'') let subst = s `compose` s' `compose` s'' let allPreds = ps ++ ps' @@ -778,16 +798,18 @@ updatePatternTypes s vars pat = case pat of -- INFER TYPEDEXP -inferTypedExp :: Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) -inferTypedExp options env e@(Can.Canonical area (Can.TypedExp exp typing sc)) = do - (_ :=> t) <- instantiate sc +inferTypedExp :: Bool -> Options -> Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) +inferTypedExp discardError options env e@(Can.Canonical area (Can.TypedExp exp typing sc)) = do + (_ :=> t) <- instantiate sc + (s1, ps1, t1, e1) <- infer discardError options env exp + s2 <- contextualUnify' env discardError e t t1 - (s1, ps1, t1, e1) <- infer options env exp - s2 <- contextualUnify env e t t1 - - return (s1 `compose` s2, apply s2 ps1, apply s2 t1, Slv.Typed (apply s2 $ ps1 :=> t1) area (Slv.TypedExp (updateQualType e1 (ps1 :=> t1)) (updateTyping typing) sc)) - -- return (s1, ps1, t1, Slv.Typed (ps1 :=> t1) area (Slv.TypedExp (updateQualType e1 (ps1 :=> t1)) (updateTyping typing) sc)) - -- return (s1 `compose` s2, ps, t, Slv.Typed (ps :=> t) area (Slv.TypedExp (updateQualType e1 (ps1 :=> t)) (updateTyping typing) sc)) + return + ( s1 `compose` s2 + , apply s2 ps1 + , apply s2 t1 + , Slv.Typed (apply s2 $ ps1 :=> t1) area (Slv.TypedExp (updateQualType e1 (ps1 :=> t1)) (updateTyping typing) sc) + ) inferExtern :: Env -> Can.Exp -> Infer (Substitution, [Pred], Type, Slv.Exp) @@ -947,14 +969,14 @@ ftvForLetGen t = case t of -inferImplicitlyTyped :: Options -> Bool -> Env -> Can.Exp -> Infer (Substitution, ([Pred], [Pred]), Env, Slv.Exp) -inferImplicitlyTyped options isLet env exp@(Can.Canonical area _) = do +inferImplicitlyTyped :: Bool -> Options -> Bool -> Env -> Can.Exp -> Infer (Substitution, ([Pred], [Pred]), Env, Slv.Exp) +inferImplicitlyTyped discardError options isLet env exp@(Can.Canonical area _) = do (env', tv) <- case Can.getExpName exp of Just n -> case M.lookup n (envVars env) of Just sc -> do _ :=> t' <- instantiate sc return (env, t') - -- ^ if a var is already present we don't override its type with a fresh var. + -- ^ if a var is already present we don't override its type with a fresh var. Nothing -> do tv <- newTVar Star @@ -964,10 +986,10 @@ inferImplicitlyTyped options isLet env exp@(Can.Canonical area _) = do tv <- newTVar Star return (env, tv) - (s, ps, t, e) <- infer options env' { envNamesInScope = M.keysSet (envVars env) } exp + (s, ps, t, e) <- infer discardError options env' { envNamesInScope = M.keysSet (envVars env) } exp let env'' = apply s env' - s' <- contextualUnify env'' exp (apply s tv) t + s' <- contextualUnify' env'' discardError exp (apply s tv) t let s'' = s `compose` s' `compose` s envWithVarsExcluded = env'' { envVars = M.filterWithKey (\k _ -> fromMaybe "" (Can.getExpName exp) /= k) $ envVars env'' } @@ -985,6 +1007,9 @@ inferImplicitlyTyped options isLet env exp@(Can.Canonical area _) = do (ds, rs, sSplit) <- catchError (split (not isLet) envWithVarsExcluded fs (ftv t') ps') (\case + _ | discardError -> + return (ps', [], mempty) + (CompilationError e NoContext) -> do throwError $ CompilationError e (Context (envCurrentPath env) area) @@ -1012,7 +1037,7 @@ inferImplicitlyTyped options isLet env exp@(Can.Canonical area _) = do -- scheme apply sFinal $ quantify gs ((rs' ++ mutPS) :=> t') - when (not isLet && not (null mutPS) && not (Slv.isNamedAbs e)) $ do + when (not isLet && not discardError && not (null mutPS) && not (Slv.isNamedAbs e)) $ do throwError $ CompilationError MutationRestriction (Context (envCurrentPath env) area) case Can.getExpName exp of @@ -1023,8 +1048,8 @@ inferImplicitlyTyped options isLet env exp@(Can.Canonical area _) = do return (sFinal, (ds ++ mutPS, rs'), env, updateQualType e (apply sFinal $ rs' :=> t')) -inferExplicitlyTyped :: Options -> Bool -> Env -> Can.Exp -> Infer (Substitution, [Pred], Env, Slv.Exp) -inferExplicitlyTyped options isLet env canExp@(Can.Canonical area (Can.TypedExp exp typing sc)) = do +inferExplicitlyTyped :: Bool -> Options -> Bool -> Env -> Can.Exp -> Infer (Substitution, [Pred], Env, Slv.Exp) +inferExplicitlyTyped discardError options isLet env canExp@(Can.Canonical area (Can.TypedExp exp typing sc)) = do qt@(qs :=> t') <- instantiate sc env' <- case Can.getExpName exp of @@ -1035,9 +1060,9 @@ inferExplicitlyTyped options isLet env canExp@(Can.Canonical area (Can.TypedExp Nothing -> return env - (s, ps, t, e) <- infer options env' { envNamesInScope = M.keysSet (envVars env) } exp + (s, ps, t, e) <- infer discardError options env' { envNamesInScope = M.keysSet (envVars env) } exp psFull <- concat <$> mapM (gatherInstPreds env') ps - s'' <- catchError (contextualUnify env canExp t' (apply (s `compose` s) t)) (throwError . limitContextArea 2) + s'' <- catchError (contextualUnify' env discardError canExp t' (apply (s `compose` s) t)) (throwError . limitContextArea 2) let s' = s `compose` s'' `compose` s'' let envWithVarsExcluded = @@ -1058,6 +1083,9 @@ inferExplicitlyTyped options isLet env canExp@(Can.Canonical area (Can.TypedExp (ds, rs, substDefaultResolution) <- catchError (split True env' fs gs ps') (\case + _ | discardError -> + return (ps', [], mempty) + (CompilationError e NoContext) -> throwError $ CompilationError e (Context (envCurrentPath env) area) @@ -1073,7 +1101,7 @@ inferExplicitlyTyped options isLet env canExp@(Can.Canonical area (Can.TypedExp ) ps - when (not isLet && not (null mutPS) && not (Slv.isNamedAbs e)) $ do + when (not isLet && not discardError && not (null mutPS) && not (Slv.isNamedAbs e)) $ do throwError $ CompilationError MutationRestriction (Context (envCurrentPath env) area) let qs'' = dedupePreds qs' @@ -1096,14 +1124,20 @@ inferExplicitlyTyped options isLet env canExp@(Can.Canonical area (Can.TypedExp return (substDefaultResolution `compose` s', qs'' ++ mutPS, env'', Slv.Typed (qs :=> t') area (Slv.TypedExp e' (updateTyping typing) sc)) -inferExplicitlyTyped _ _ _ _ = undefined +inferExplicitlyTyped _ _ _ _ _ = undefined inferExps :: Options -> Env -> [Can.Exp] -> Infer ([Slv.Exp], Env) inferExps _ env [] = return ([], env) inferExps options env (e : es) = do - (e' , env' ) <- catchError (inferExp options env e) (recordError env e) + (e' , env' ) <- + catchError + (inferExp False options env e) + (\err -> do + pushError err + catchError (inferExp True options env e) (\_ -> return (Just $ toSolved e, env)) + ) (es', nextEnv) <- inferExps options env' es case e' of @@ -1114,16 +1148,16 @@ inferExps options env (e : es) = do return (es', nextEnv) -inferExp :: Options -> Env -> Can.Exp -> Infer (Maybe Slv.Exp, Env) -inferExp _ env (Can.Canonical _ (Can.TypeExport _)) = +inferExp :: Bool -> Options -> Env -> Can.Exp -> Infer (Maybe Slv.Exp, Env) +inferExp _ _ env (Can.Canonical _ (Can.TypeExport _)) = return (Nothing, env) -inferExp options env e = do +inferExp discardError options env e = do (s, _, env', e') <- upgradeContext env (Can.getArea e) $ case e of Can.Canonical _ Can.TypedExp{} -> - inferExplicitlyTyped options False env e + inferExplicitlyTyped discardError options False env e _ -> do - (s, (_, placeholderPreds), env'', e') <- inferImplicitlyTyped options False env e + (s, (_, placeholderPreds), env'', e') <- inferImplicitlyTyped discardError options False env e return (s, placeholderPreds, env'', e') diff --git a/compiler/main/Infer/Interface.hs b/compiler/main/Infer/Interface.hs index 748297c2c..2db713caf 100644 --- a/compiler/main/Infer/Interface.hs +++ b/compiler/main/Infer/Interface.hs @@ -157,7 +157,7 @@ inferMethod' options env instancePreds constraintPreds (mn, Can.Canonical area ( let sc = quantify (ftv qt') qt' - (s, ps, t, e) <- infer options env m + (s, ps, t, e) <- infer False options env m (qs :=> t') <- instantiate sc s' <- (`compose` s) <$> unify t' t diff --git a/compiler/main/Infer/Unify.hs b/compiler/main/Infer/Unify.hs index 279e939d5..28e5850e7 100644 --- a/compiler/main/Infer/Unify.hs +++ b/compiler/main/Infer/Unify.hs @@ -191,6 +191,7 @@ contextualUnifyAccess env exp t1 t2 = catchError addContext env exp e ) + contextualUnify :: Env -> Can.Canonical a -> Type -> Type -> Infer Substitution contextualUnify env exp t1 t2 = catchError (unify t1 t2) @@ -210,6 +211,30 @@ contextualUnify env exp t1 t2 = catchError ) +-- A version of contextualUnify that either throws or not, which is used when an error +-- was reported to still keep the most general type for the language server +contextualUnify' :: Env -> Bool -> Can.Canonical a -> Type -> Type -> Infer Substitution +contextualUnify' env discardError exp t1 t2 = catchError + (unify t1 t2) + (\case + _ | discardError -> + return $ gentleUnify t1 t2 + + (CompilationError (UnificationError _ _) ctx) -> do + let t2' = getParamTypeOrSame t2 + t1' = getParamTypeOrSame t1 + hasNotChanged = t2' == t2 || t1' == t1 + t2'' = if hasNotChanged then t2 else t2' + t1'' = if hasNotChanged then t1 else t1' + (t2''', t1''') <- catchError (unify t1'' t2'' >> return (t2, t1)) (\_ -> return (t2'', t1'')) + (t2'''', t1'''') <- improveRecordErrorTypes t2''' t1''' + addContext env exp (CompilationError (UnificationError t2'''' t1'''') ctx) + + e -> + addContext env exp e + ) + + contextualUnifyElems :: Env -> [(Can.Canonical a, Type)] -> Infer Substitution contextualUnifyElems _ [] = return M.empty contextualUnifyElems env (h : r) = contextualUnifyElems' env h r diff --git a/compiler/main/Run/LanguageServer.hs b/compiler/main/Run/LanguageServer.hs index 5f1f9e7da..3e590742c 100644 --- a/compiler/main/Run/LanguageServer.hs +++ b/compiler/main/Run/LanguageServer.hs @@ -8,10 +8,12 @@ {-# OPTIONS_GHC -Wno-incomplete-patterns #-} {-# LANGUAGE NamedFieldPuns #-} {-# HLINT ignore "Use list comprehension" #-} +{-# LANGUAGE TupleSections #-} module Run.LanguageServer where import Language.LSP.Server import Language.LSP.Types +import Language.LSP.Types.Capabilities import Control.Monad.IO.Class import qualified Data.Text as T import Control.Monad.Base @@ -19,7 +21,6 @@ import qualified Rock import Driver.Rules import qualified Driver.Query as Query import Text.Show.Pretty (ppShow) -import LLVM.Internal.FFI.Type (x86FP80TypeInContext) import qualified Driver import Error.Error import qualified Data.Map as Map @@ -36,7 +37,7 @@ import Data.IORef import qualified AST.Solved as Slv import Explain.Format (prettyPrintQualType, prettyPrintType, kindToStr, prettyPrintTyping, prettyPrintTyping', renderSchemesWithDiff) import Control.Applicative ((<|>)) -import Infer.Type (Qual((:=>)), Type (..), kind, Kind (Star), TCon (..), TVar (..), findTypeVarInType, collectVars, buildKind, getQualified, Scheme (Forall)) +import Infer.Type (Qual((:=>)), Type (..), kind, Kind (Star), TCon (..), TVar (..), findTypeVarInType, collectVars, buildKind, getQualified, Scheme (Forall), getParamTypes) import qualified Error.Warning as Warning import Error.Warning (CompilationWarning(CompilationWarning)) import qualified Error.Error as Error @@ -62,11 +63,16 @@ import qualified Canonicalize.Env as CanEnv import qualified Canonicalize.Interface as Can import System.FilePath (takeFileName, dropExtension) import Run.OptimizationLevel +import Data.Maybe (isJust) +import GHC.Base (when) +import Language.LSP.VFS (virtualFileText) +import qualified Infer.Env as SlvEnv +import Data.Char (isAlphaNum, isDigit, isUpper) -handlers :: State -> Handlers (LspM ()) -handlers state = mconcat +handlers :: State -> State -> Handlers (LspM ()) +handlers state autocompletionState = mconcat [ notificationHandler SInitialized $ \_not -> sendNotification SWindowLogMessage (LogMessageParams MtInfo "Madlib server initialized") , requestHandler STextDocumentHover $ \req responder -> @@ -94,24 +100,74 @@ handlers state = mconcat locs -> responder $ Right (InR $ InL $ List locs) - -- , requestHandler STextDocumentCompletion $ \(RequestMessage _ _ _ completionParams) responder -> do - -- sendNotification SWindowLogMessage $ LogMessageParams MtInfo (T.pack $ ppShow completionParams) + , requestHandler STextDocumentCompletion $ \(RequestMessage _ _ _ (CompletionParams (TextDocumentIdentifier uri) (Position line col) _ _ _)) responder -> do + recordAndPrintDuration "completion" $ do + file <- getVirtualFile (toNormalizedUri uri) + let fileContent = T.unpack . virtualFileText <$> file + case fileContent of + Just content -> do + let foundLine = take (col + 1) $ lines content !! line + + suggestions <- getAutocompletionSuggestions autocompletionState (Loc 0 (line + 1) (col + 1)) (uriToPath uri) content + -- https://github.com/haskell/lsp/blob/76b86d54040cfa6c8306433a29404fa6402a5f69/lsp-types/src/Language/LSP/Types/Completion.hs + let completionItems = map (\(s, typing, kind) -> CompletionItem (T.pack s) (Just kind) Nothing (Just $ T.pack typing) Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing) suggestions + responder $ Right $ InR (CompletionList True (List completionItems)) + sendNotification SWindowLogMessage $ LogMessageParams MtInfo (T.pack $ ppShow (computeAutocompletionKind (reverse foundLine))) + + Nothing -> + return () -- , requestHandler STextDocumentDocumentLink $ \req responder -> do -- sendNotification SWindowLogMessage $ LogMessageParams MtInfo (T.pack $ ppShow req) -- , requestHandler STextDocumentImplementation $ \_ responder -> do -- sendNotification SWindowLogMessage $ LogMessageParams MtInfo "tdi" , notificationHandler STextDocumentDidOpen $ \(NotificationMessage _ _ (DidOpenTextDocumentParams (TextDocumentItem uri _ _ _))) -> do - recordAndPrintDuration "file open" $ generateDiagnostics False state uri mempty + recordAndPrintDuration "file open" $ generateDiagnostics False state autocompletionState uri mempty , notificationHandler STextDocumentDidSave $ \(NotificationMessage _ _ (DidSaveTextDocumentParams (TextDocumentIdentifier uri) _)) -> - recordAndPrintDuration "file save" $ generateDiagnostics False state uri mempty + recordAndPrintDuration "file save" $ generateDiagnostics False state autocompletionState uri mempty , notificationHandler STextDocumentDidChange $ \(NotificationMessage _ _ (DidChangeTextDocumentParams (VersionedTextDocumentIdentifier uri _) (List changes))) -> do recordAndPrintDuration "file change" $ do let (TextDocumentContentChangeEvent _ _ docContent) = last changes - generateDiagnostics True state uri (Map.singleton (uriToPath uri) (T.unpack docContent)) + generateDiagnostics True state autocompletionState uri (Map.singleton (uriToPath uri) (T.unpack docContent)) ] +data AutocompletionKind + = AutocompletingName String + | AutocompletingRecordAccess String String + | AutocompletingNamespaceAccess String + deriving(Eq, Show) + + +computeAutocompletionKind :: String -> AutocompletionKind +computeAutocompletionKind reversedCurrentLine = + let consumeChars chars = case chars of + c : cs | isAlphaNum c -> + c : consumeChars cs + + _ -> + [] + readName chars = + let _name = reverse $ consumeChars chars + _rest = drop (length _name) chars + in (dropWhile isDigit _name, _rest) + (name, rest) = readName reversedCurrentLine + in case rest of + '.' : afterDot -> + let (recordName, rest') = readName afterDot + in case rest' of + _ | not (null recordName) && isUpper (head recordName) -> + AutocompletingNamespaceAccess recordName + + + _ -> + AutocompletingRecordAccess recordName name + + _ -> + AutocompletingName name + + + buildOptions :: Target -> LspM () Options.Options buildOptions target = do maybeRootPath <- getRootPath @@ -152,6 +208,14 @@ isInRange (Loc _ l c) (Area (Loc _ lstart cstart) (Loc _ lend cend)) = && (not (l == lstart && c < cstart) && not (l == lend && c > cend)) +isLocAfter :: Loc -> Area -> Bool +isLocAfter (Loc _ l _) (Area _ (Loc _ lend _)) = + l > lend + +isLocAfterStart :: Loc -> Area -> Bool +isLocAfterStart (Loc _ l _) (Area (Loc _ lstart _) _) = + l > lstart + prettyQt :: Bool -> Qual Type -> String prettyQt topLevel qt@(_ :=> t) @@ -160,6 +224,11 @@ prettyQt topLevel qt@(_ :=> t) | otherwise = let (r, _) = renderSchemesWithDiff False (Forall [] ([] :=> t)) (Forall [] ([] :=> t)) in r +prettyScheme :: Scheme -> String +prettyScheme sc = + let (r, _) = renderSchemesWithDiff False sc sc in r + + data Node = ExpNode Bool Slv.Exp | NameNode Bool (Slv.Solved String) @@ -339,6 +408,7 @@ findNodeAtLoc topLevel loc input@(Slv.Typed qt area exp) = findNodeAtLoc False loc lhs <|> findNodeAtLoc False loc exp Slv.Access rec field -> + -- Nothing findNodeAtLoc False loc rec <|> findNodeAtLoc False loc field Slv.ArrayAccess arr index -> @@ -680,6 +750,15 @@ nodeToHoverInfo modulePath node = do <> "*" +getAutocompletionSuggestions :: State -> Loc -> FilePath -> String -> LspM () [(String, String, CompletionItemKind)] +getAutocompletionSuggestions autocompletionState loc path moduleContent = do + llvmOptions <- buildOptions TLLVM + (llvmResult, _, _) <- liftIO $ runTask autocompletionState llvmOptions { optEntrypoint = path } Driver.Don'tPrune mempty mempty (completionSuggestionsTask loc path moduleContent) + jsOptions <- buildOptions TNode + (jsResult, _, _) <- liftIO $ runTask autocompletionState jsOptions { optEntrypoint = path } Driver.Don'tPrune mempty mempty (completionSuggestionsTask loc path moduleContent) + return $ Set.toList $ Set.fromList $ llvmResult ++ jsResult + + getDefinitionLinks :: State -> Loc -> FilePath -> LspM () [Location] getDefinitionLinks state loc path = do jsOptions <- buildOptions TNode @@ -727,7 +806,14 @@ uriToPath uri = unpacked -runTypeCheck :: Bool -> State -> Target -> FilePath -> Map.Map FilePath String -> LspM () ([CompilationWarning], [CompilationError]) +typeCheckFileTask :: FilePath -> Rock.Task Query.Query Bool +typeCheckFileTask path = do + parsedAst <- Rock.fetch $ Query.ParsedAST path + Rock.fetch $ Query.SolvedASTWithEnv path + return $ isJust (Src.apath parsedAst) + + +runTypeCheck :: Bool -> State -> Target -> FilePath -> Map.Map FilePath String -> LspM () (Bool, [CompilationWarning], [CompilationError]) runTypeCheck invalidatePath state target path fileUpdates = do let changedFiles = if invalidatePath then @@ -743,8 +829,8 @@ runTypeCheck invalidatePath state target path fileUpdates = do Driver.Don'tPrune changedFiles fileUpdates - (Driver.typeCheckFileTask path) - :: IO (Either (Cyclic Query.Query) ((), [CompilationWarning], [CompilationError])) + (typeCheckFileTask path) + :: IO (Either (Cyclic Query.Query) (Bool, [CompilationWarning], [CompilationError])) case result of Left _ -> do @@ -756,10 +842,10 @@ runTypeCheck invalidatePath state target path fileUpdates = do fileUpdates (Driver.detectCyleTask path) - return (warnings, errors) + return (False, warnings, errors) - Right (_, warnings, errors) -> - return (warnings, errors) + Right (couldParse, warnings, errors) -> + return (couldParse, warnings, errors) sendDiagnosticsForWarningsAndErrors :: [CompilationWarning] -> [CompilationError] -> LspM () () @@ -795,14 +881,20 @@ sendDiagnosticsForWarningsAndErrors warnings errors = do publishDiagnostics 100 (toNormalizedUri moduleUri) Nothing diagnosticsBySource -generateDiagnostics :: Bool -> State -> Uri -> Map.Map FilePath String -> LspM () () -generateDiagnostics invalidatePath state uri fileUpdates = do +generateDiagnostics :: Bool -> State -> State -> Uri -> Map.Map FilePath String -> LspM () () +generateDiagnostics invalidatePath state autocompletionState uri fileUpdates = do let path = uriToPath uri - (jsWarnings, jsErrors) <- runTypeCheck invalidatePath state TNode path fileUpdates - (llvmWarnings, llvmErrors) <- runTypeCheck invalidatePath state TLLVM path fileUpdates + (couldParseJs, jsWarnings, jsErrors) <- runTypeCheck invalidatePath state TNode path fileUpdates + (couldParseLlvm, llvmWarnings, llvmErrors) <- runTypeCheck invalidatePath state TLLVM path fileUpdates let allWarnings = jsWarnings `List.union` llvmWarnings let allErrors = jsErrors `List.union` llvmErrors + when (null jsErrors) $ do + liftIO $ copyStateTo (_jsDriverState state) (_jsDriverState autocompletionState) + + when (null llvmErrors) $ do + liftIO $ copyStateTo (_llvmDriverState state) (_llvmDriverState autocompletionState) + sendDiagnosticsForWarningsAndErrors allWarnings allErrors @@ -955,17 +1047,41 @@ textDocumentSyncOptions = (Just $ InL True) -- _save +copyStateTo :: Driver.State err -> Driver.State err -> IO () +copyStateTo from to = do + _startedVar <- readIORef (Driver._startedVar from) + _hashesVar <- readIORef (Driver._hashesVar from) + _reverseDependenciesVar <- readIORef (Driver._reverseDependenciesVar from) + _tracesVar <- readIORef (Driver._tracesVar from) + _errorsVar <- readIORef (Driver._errorsVar from) + _warningsVar <- readIORef (Driver._warningsVar from) + + atomicWriteIORef (Driver._startedVar to) _startedVar + atomicWriteIORef (Driver._hashesVar to) _hashesVar + atomicWriteIORef (Driver._reverseDependenciesVar to) _reverseDependenciesVar + atomicWriteIORef (Driver._tracesVar to) _tracesVar + atomicWriteIORef (Driver._errorsVar to) _errorsVar + atomicWriteIORef (Driver._warningsVar to) _warningsVar + + return () + + runLanguageServer :: IO () runLanguageServer = do jsDriverState <- Driver.initialState llvmDriverState <- Driver.initialState openFiles <- newIORef mempty let state = State jsDriverState llvmDriverState openFiles mempty + + autocompletionJsDriverState <- Driver.initialState + autocompletionLlvmDriverState <- Driver.initialState + autocompletionOpenFiles <- newIORef mempty + let autocompletionState = State autocompletionJsDriverState autocompletionLlvmDriverState autocompletionOpenFiles mempty runServer $ ServerDefinition { defaultConfig = () , onConfigurationChange = const $ pure $ Right () , doInitialize = \env _req -> pure $ Right env - , staticHandlers = handlers state + , staticHandlers = handlers state autocompletionState , interpretHandler = \env -> Iso (runLspT env) liftIO , options = defaultOptions { textDocumentSync = Just textDocumentSyncOptions } } @@ -1022,6 +1138,89 @@ findNameInNode node = case node of Nothing +findTopLevelExp :: Loc -> [Slv.Exp] -> Maybe Slv.Exp +findTopLevelExp loc exps = case exps of + e@(Slv.Typed _ area _) : next -> + if isInRange loc area then + Just e + else + findTopLevelExp loc next + + [] -> + Nothing + + +getLocalNames :: Loc -> Slv.Exp -> [(String, Type)] +getLocalNames loc exp = case exp of + Slv.Typed _ area (Slv.Assignment _ e) | not (isLocAfter loc area) -> + getLocalNames loc e + + Slv.Typed (_ :=> t) _ (Slv.Assignment n e) -> + (n, t) : getLocalNames loc e + + Slv.Typed _ area (Slv.Abs _ body) | not (isLocAfterStart loc area) -> + body >>= getLocalNames loc + + Slv.Typed (_ :=> t) _ (Slv.Abs param body) -> + (Slv.getValue param, getParamTypes t !! 0) : (body >>= getLocalNames loc) + + Slv.Typed _ _ (Slv.Export e) -> + getLocalNames loc e + + Slv.Typed _ _ (Slv.TypedExp e _ _) -> + getLocalNames loc e + + _ -> + [] + + +completionSuggestionsTask :: Loc -> FilePath -> String -> Rock.Task Query.Query [(String, String, CompletionItemKind)] +completionSuggestionsTask loc@(Loc _ line col) modulePath moduleContent = do + (typedAst, env) <- Rock.fetch $ Query.SolvedASTWithEnv modulePath + + let foundLine = take col $ lines moduleContent !! (line - 1) + let autocompletionKind = computeAutocompletionKind (reverse foundLine) + + let topLevelExp = findTopLevelExp loc (Slv.aexps typedAst) + let localNames = map (\(n, t) -> (n, Forall [] ([] :=> t))) $ Maybe.fromMaybe [] $ (getLocalNames loc) <$> topLevelExp + let namesInEnv = Map.toList $ SlvEnv.envVars env + let methodsInEnv = Map.toList $ SlvEnv.envMethods env + case autocompletionKind of + AutocompletingNamespaceAccess namespace -> + return + $ map (\(n, qt) -> (if '.' `List.elem` n then List.tail $ dropWhile (/= '.') n else n, prettyScheme qt, CiFunction)) + $ filter (List.isPrefixOf namespace . fst) namesInEnv + + AutocompletingName _ -> + return + $ map (\(n, qt) -> (n, prettyScheme qt, CiFunction)) + $ localNames ++ namesInEnv ++ methodsInEnv + + AutocompletingRecordAccess recordName fieldName -> do + let updatedLoc = Loc 0 line (col - length fieldName - 1) + case findNodeInExps updatedLoc (Slv.aexps typedAst ++ Slv.getAllMethods typedAst) of + Just (ExpNode _ (Slv.Typed (_ :=> TRecord fields _ extraFields) _ _)) -> + return + $ map (\(n, t) -> (n, prettyScheme (Forall [] ([] :=> t)), CiField)) + $ Map.toList $ fields <> extraFields + + Just (NameNode _ (Slv.Typed (_ :=> TApp _ (TRecord fields _ extraFields)) _ _)) -> + return + $ map (\(n, t) -> (n, prettyScheme (Forall [] ([] :=> t)), CiField)) + $ Map.toList $ fields <> extraFields + + f -> + case List.find (\(n, _) -> n == recordName) localNames of + Just (_, Forall _ (_ :=> TRecord fields _ extraFields)) -> + return + $ map (\(n, t) -> (n, prettyScheme (Forall [] ([] :=> t)), CiField)) + $ Map.toList + $ fields <> extraFields + + _ -> + return $ (show f, "", CiConstant) : (map (\(n, qt) -> (n, prettyScheme qt, CiField)) $ localNames ++ namesInEnv ++ methodsInEnv) + + definitionLocationTask :: Loc -> FilePath -> Rock.Task Query.Query (Maybe (FilePath, Area)) definitionLocationTask loc path = do -- hasCycle <- Rock.fetch $ Query.DetectImportCycle [] path diff --git a/madlib.cabal b/madlib.cabal index 68015e0b1..32b3d9f4f 100644 --- a/madlib.cabal +++ b/madlib.cabal @@ -5,7 +5,7 @@ cabal-version: 2.0 -- see: https://github.com/sol/hpack name: madlib -version: 0.23.17 +version: 0.24.0 description: Please see the README on GitHub at homepage: https://github.com/madlib-lang/madlib#readme bug-reports: https://github.com/madlib-lang/madlib/issues diff --git a/package.yaml b/package.yaml index 091297b03..a3efc23de 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: madlib -version: 0.23.17 +version: 0.24.0 github: "madlib-lang/madlib" license: BSD3 author: "Arnaud Boeglin, Brekk Bockrath" diff --git a/pkg/package.json b/pkg/package.json index 8638e2d31..b1d7f9f4a 100644 --- a/pkg/package.json +++ b/pkg/package.json @@ -1,6 +1,6 @@ { "name": "@madlib-lang/madlib", - "version": "0.23.17", + "version": "0.24.0", "main": "./src/run.js", "bin": { "madlib": "src/run.js"