@@ -3,21 +3,23 @@ module Reporting.Error.Type where
33
44--import Data.Aeson ((.=))
55import qualified Data.Aeson as Json
6+import qualified Text.PrettyPrint as P
67
78import qualified AST.Type as T
9+import qualified Reporting.PrettyPrint as P
810import qualified Reporting.Region as R
911
1012
1113data Error
1214 = Mismatch Mismatch
13− | InfiniteType R.Region
15+ | InfiniteType
1416 | BadMain T.Canonical
1517
1618
1719data Mismatch = MismatchInfo
18− { hint :: Maybe String
19− , leftType :: T.Canonical
20− , rightType :: T.Canonical
20+ { _hint :: Maybe String
21+ , _leftType :: T.Canonical
22+ , _rightType :: T.Canonical
2123 }
2224
2325
@@ -36,3 +38,27 @@ toJson err =
3638 case err of
3739 _ -> error "Type.toJson"
3840
41+
42+-- HINTS
43+
44+toHint :: Error -> String
45+toHint err =
46+ case err of
47+ Mismatch (MismatchInfo maybeHint leftType rightType) ->
48+ maybe "This expression is triggering a type mismatch." id maybeHint
49+ ++ "\n\n"
50+ ++ "I am trying to infer the type, but I am getting conflicting information.\n"
51+ ++ "Some evidence suggests in has the type:\n\n"
52+ ++ P.render (P.nest 4 (P.pretty False leftType))
53+ ++ "\n\nBut other evidence suggests:\n\n"
54+ ++ P.render (P.nest 4 (P.pretty False rightType))
55+
56+ InfiniteType ->
57+ error "TODO"
58+
59+ BadMain tipe ->
60+ "The 'main' value has an unsupported type:\n\n"
61+ ++ P.render (P.nest 4 (P.pretty False tipe))
62+ ++ "\n\n"
63+ ++ "Please give me an Element, Html, (Signal Element), or (Signal Html) so\n"
64+ ++ "that I can render it on screen!"