@@ -1,287 +1,26 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Variable
3module AST.Variable
4− ( Canonical(..), Home(..)
5− , Global(..)
4+ ( Global(..)
6− , local, topLevel, fromModule
8− , int, float, char, string
11− , never, task, router, shader, decoder
12− , isLocalHome, isCons
13− , is, isJson, isMaybe, isArray, isTask, isList
14− , isKernel, isPrim, isLocal
19import Data.Binary
9import Data.Binary
20−import Data.Monoid ((<>))
21−import Data.Text (Text)
23import qualified AST.Module.Name as ModuleName
11import qualified AST.Module.Name as ModuleName
24−import qualified Elm.Package as Pkg
12+import qualified Elm.Name as N
33− | Module !ModuleName.Canonical
34− | TopLevel !ModuleName.Canonical
48-- GLOBAL NAMES
16-- GLOBAL NAMES
51−data Global = Global !ModuleName.Canonical !Text
19+data Global = Global !ModuleName.Canonical !N.Name
52 deriving (Eq, Ord)
20 deriving (Eq, Ord)
59−local :: Text -> Canonical
64−topLevel :: ModuleName.Canonical -> Text -> Canonical
66− Canonical (TopLevel home) x
69−fromModule :: ModuleName.Canonical -> Text -> Canonical
70−fromModule home name =
71− Canonical (Module home) name
74−inCore :: ModuleName.Raw -> Text -> Canonical
76− Canonical (Module (ModuleName.inCore home)) name
79−inHtml :: ModuleName.Raw -> Text -> Canonical
81− Canonical (Module (ModuleName.inHtml home)) name
90− Canonical BuiltIn "Int"
95− Canonical BuiltIn "Float"
100− Canonical BuiltIn "Char"
105− Canonical BuiltIn "String"
114− Canonical BuiltIn "List"
119− Canonical BuiltIn "::"
124− Canonical BuiltIn "[]"
133− Canonical BuiltIn "Bool"
138− Canonical BuiltIn "True"
143− Canonical BuiltIn "False"
152− inCore "Basics" "Never"
157− inCore "Platform" "Task"
162− inCore "Platform" "Router"
167− fromModule (ModuleName.Canonical Pkg.webgl "WebGL") "Shader"
172− inCore "Json.Decode" "Decoder"
176−-- VARIABLE RECOGNIZERS
179−isLocalHome :: Home -> Bool
195−isCons :: Canonical -> Bool
198− Canonical BuiltIn "::" ->
205−is :: ModuleName.Raw -> Text -> Canonical -> Bool
207− var == inCore home name
210−isJson :: Canonical -> Bool
212− is "Json.Encode" "Value"
215−isMaybe :: Canonical -> Bool
219−isArray :: Canonical -> Bool
224−isTask :: Canonical -> Bool
229−isList :: Canonical -> Bool
231− var == Canonical BuiltIn "List"
234−isKernel :: Canonical -> Bool
237− Canonical (Module name) _ ->
238− ModuleName.canonicalIsKernel name
244−isPrim :: Text -> Canonical -> Bool
245−isPrim prim (Canonical home name) =
254−isLocal :: (Text -> Bool) -> Canonical -> Bool
255−isLocal check (Canonical home name) =
268−toText :: Canonical -> Text
269−toText (Canonical home name) =
274− Module moduleName ->
275− ModuleName.canonicalToText moduleName <> "." <> name
285-- BINARY SERIALIZATION
24-- BINARY SERIALIZATION
@@ -291,28 +30,3 @@ instance Binary Global where
293 Global <$> get <*> get
32 Global <$> get <*> get
296−instance Binary Canonical where
297− put (Canonical home name) =
300− putWord8 0 >> put name
303− putWord8 1 >> put path >> put name
306− putWord8 2 >> put path >> put name
309− putWord8 3 >> put name
314− 0 -> Canonical BuiltIn <$> get
315− 1 -> Canonical . Module <$> get <*> get
316− 2 -> Canonical . TopLevel <$> get <*> get
317− 3 -> Canonical Local <$> get
318− _ -> error "Unexpected tag when deserializing canonical variable"