on 4a4ef72 help sign in
elk/src/AST/Module/Name.hs
200 lines 3.0 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Module.Name
4 ( Canonical(..)
5 , basics, char, string
6 , maybe, list, array
7 , platform, cmd, sub
8 , virtualDom, debug, bitwise
9 , jsonDecode, jsonEncode
10 , webgl, vector2, vector3, vector4, matrix4
11 , canonicalToText
12 , isKernel, getKernel, canonicalIsKernel
13 )
14 where
17import Prelude hiding (maybe)
18import Control.Monad (liftM2)
19import Data.Binary
20import qualified Data.Text as Text
21import Data.Text (Text)
23import qualified Elm.Name as N
24import qualified Elm.Package as Pkg
28-- NAMES
31data Canonical =
32 Canonical
33 { _package :: !Pkg.Name
34 , _module :: !N.Name
35 }
36 deriving (Ord)
39instance Eq Canonical where
40 (==) (Canonical pkg home) (Canonical pkg' home') =
41 home == home' && pkg == pkg'
45-- PRIMITIVES
48{-# NOINLINE basics #-}
49basics :: Canonical
50basics = Canonical Pkg.core "Basics"
53{-# NOINLINE char #-}
54char :: Canonical
55char = Canonical Pkg.core N.char
58{-# NOINLINE string #-}
59string :: Canonical
60string = Canonical Pkg.core N.string
64-- CONTAINERS
67{-# NOINLINE maybe #-}
68maybe :: Canonical
69maybe = Canonical Pkg.core N.maybe
72{-# NOINLINE list #-}
73list :: Canonical
74list = Canonical Pkg.core N.list
77{-# NOINLINE array #-}
78array :: Canonical
79array = Canonical Pkg.core N.array
83-- EFFECTS
86{-# NOINLINE platform #-}
87platform :: Canonical
88platform = Canonical Pkg.core "Platform"
91{-# NOINLINE cmd #-}
92cmd :: Canonical
93cmd = Canonical Pkg.core "Platform.Cmd"
96{-# NOINLINE sub #-}
97sub :: Canonical
98sub = Canonical Pkg.core "Platform.Sub"
102-- MISC
105{-# NOINLINE virtualDom #-}
106virtualDom :: Canonical
107virtualDom = Canonical Pkg.virtualDom "VirtualDom"
110{-# NOINLINE debug #-}
111debug :: Canonical
112debug = Canonical Pkg.core N.debug
115{-# NOINLINE bitwise #-}
116bitwise :: Canonical
117bitwise = Canonical Pkg.core N.bitwise
121-- JSON
124{-# NOINLINE jsonDecode #-}
125jsonDecode :: Canonical
126jsonDecode = Canonical Pkg.core "Json.Decode"
129{-# NOINLINE jsonEncode #-}
130jsonEncode :: Canonical
131jsonEncode = Canonical Pkg.core "Json.Encode"
135-- WEBGL
138{-# NOINLINE webgl #-}
139webgl :: Canonical
140webgl = Canonical Pkg.webgl "WebGL"
143{-# NOINLINE vector2 #-}
144vector2 :: Canonical
145vector2 = Canonical Pkg.linearAlgebra "Math.Vector2"
148{-# NOINLINE vector3 #-}
149vector3 :: Canonical
150vector3 = Canonical Pkg.linearAlgebra "Math.Vector3"
153{-# NOINLINE vector4 #-}
154vector4 :: Canonical
155vector4 = Canonical Pkg.linearAlgebra "Math.Vector4"
158{-# NOINLINE matrix4 #-}
159matrix4 :: Canonical
160matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
164-- CONVERSIONS
167canonicalToText :: Canonical -> Text
168canonicalToText (Canonical _ name) =
169 name
173-- IS KERNEL
176isKernel :: N.Name -> Bool
177isKernel name =
178 Text.isPrefixOf "Elm.Kernel." name
181getKernel :: N.Name -> Text
182getKernel name =
183 Text.drop 11 name
186canonicalIsKernel :: Canonical -> Bool
187canonicalIsKernel (Canonical _ name) =
188 isKernel name
192-- BINARY
195instance Binary Canonical where
196 put (Canonical a b) =
197 put a >> put b
199 get =
200 liftM2 Canonical get get