@@ -6,13 +6,14 @@ module Elm.Compiler.Type
7import Control.Applicative ((<$>), (<*>))
7import Control.Applicative ((<$>), (<*>))
8import Control.Arrow (second)
8import Control.Arrow (second)
9−import Data.Aeson ((.:), (.:?), (.=))
9+import Data.Aeson ((.:), (.=))
10import qualified Data.Aeson as Json
10import qualified Data.Aeson as Json
11import qualified Data.ByteString.Lazy.Char8 as BS
11import qualified Data.ByteString.Lazy.Char8 as BS
12+import qualified Data.List as List
12import qualified Data.Text as Text
13import qualified Data.Text as Text
14−import qualified AST.Type as Type
15+import qualified AST.Helpers as Help
15−import qualified AST.Variable as Var
16+import Elm.Utils ((|>))
@@ -25,14 +26,74 @@ data Type
26-- TO STRING
27-- TO STRING
29+data Context = None | ADT | Function
28toString :: Type -> String
32toString :: Type -> String
29toString tipe =
33toString tipe =
34+ toStringHelp None tipe
37+toStringHelp :: Context -> Type -> String
38+toStringHelp context tipe =
30− case tipe of
39+ case tipe of
31− Lambda t t' -> undefined
40+ Lambda t1 t2 ->
32− Var x -> undefined
41+ let string = toStringHelp Function t1 ++ " -> " ++ toString t2
33− Type name -> undefined
49+ Type name -> name
34− App t ts -> undefined
50+
51+ App (Type "List") [t] ->
52+ sandwich "[" "]" (toString t)
55+ | Help.isTuple name ->
57+ |> List.intercalate ", "
61+ let string = name ++ spacePrefix (map (toStringHelp ADT) args)
63+ case (context, args) of
64+ (ADT, _ : _) -> parens string
35− Record fields maybeExtension -> undefined
67+ Record fields maybeExtension ->
68+ let viewField (key, value) =
69+ key ++ " : " ++ toString value
71+ viewExtension maybeType =
74+ Just t -> toString t ++ " | "
78+ [ viewExtension maybeExtension
79+ , map viewField fields
80+ |> List.intercalate ", "
84+parens :: String -> String
86+ sandwich "(" ")" string
89+spacePrefix :: [String] -> String
91+ concatMap (" " ++) strings
94+sandwich :: String -> String -> String -> String
95+sandwich start stop string =
96+ start ++ string ++ stop
38-- JSON for TYPE
99-- JSON for TYPE