on 3ff1dd3 help sign in
203 lines 3.1 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Module.Name
4 ( Canonical(..)
5 , basics, char, string
6 , maybe, result, list, array, dict, tuple
7 , platform, cmd, sub
8 , virtualDom, debug, bitwise
9 , jsonDecode, jsonEncode
10 , webgl, vector2, vector3, vector4, matrix4
11 , isKernel, getKernel, canonicalIsKernel
12 )
13 where
16import Prelude hiding (maybe)
17import Control.Monad (liftM2)
18import Data.Binary
20import qualified Elm.Name as N
21import qualified Elm.Package as Pkg
25-- NAMES
28data Canonical =
29 Canonical
30 { _package :: !Pkg.Name
31 , _module :: !N.Name
32 }
33 deriving (Ord)
36instance Eq Canonical where
37 (==) (Canonical pkg home) (Canonical pkg' home') =
38 home == home' && pkg == pkg'
42-- PRIMITIVES
45{-# NOINLINE basics #-}
46basics :: Canonical
47basics = Canonical Pkg.core "Basics"
50{-# NOINLINE char #-}
51char :: Canonical
52char = Canonical Pkg.core N.char
55{-# NOINLINE string #-}
56string :: Canonical
57string = Canonical Pkg.core N.string
61-- CONTAINERS
64{-# NOINLINE maybe #-}
65maybe :: Canonical
66maybe = Canonical Pkg.core N.maybe
69{-# NOINLINE result #-}
70result :: Canonical
71result = Canonical Pkg.core N.result
74{-# NOINLINE list #-}
75list :: Canonical
76list = Canonical Pkg.core N.list
79{-# NOINLINE array #-}
80array :: Canonical
81array = Canonical Pkg.core N.array
84{-# NOINLINE dict #-}
85dict :: Canonical
86dict = Canonical Pkg.core N.dict
89{-# NOINLINE tuple #-}
90tuple :: Canonical
91tuple = Canonical Pkg.core N.tuple
95-- EFFECTS
98{-# NOINLINE platform #-}
99platform :: Canonical
100platform = Canonical Pkg.core N.platform
103{-# NOINLINE cmd #-}
104cmd :: Canonical
105cmd = Canonical Pkg.core "Platform.Cmd"
108{-# NOINLINE sub #-}
109sub :: Canonical
110sub = Canonical Pkg.core "Platform.Sub"
114-- MISC
117{-# NOINLINE virtualDom #-}
118virtualDom :: Canonical
119virtualDom = Canonical Pkg.virtualDom N.virtualDom
122{-# NOINLINE debug #-}
123debug :: Canonical
124debug = Canonical Pkg.core N.debug
127{-# NOINLINE bitwise #-}
128bitwise :: Canonical
129bitwise = Canonical Pkg.core N.bitwise
133-- JSON
136{-# NOINLINE jsonDecode #-}
137jsonDecode :: Canonical
138jsonDecode = Canonical Pkg.json "Json.Decode"
141{-# NOINLINE jsonEncode #-}
142jsonEncode :: Canonical
143jsonEncode = Canonical Pkg.json "Json.Encode"
147-- WEBGL
150{-# NOINLINE webgl #-}
151webgl :: Canonical
152webgl = Canonical Pkg.webgl "WebGL"
155{-# NOINLINE vector2 #-}
156vector2 :: Canonical
157vector2 = Canonical Pkg.linearAlgebra "Math.Vector2"
160{-# NOINLINE vector3 #-}
161vector3 :: Canonical
162vector3 = Canonical Pkg.linearAlgebra "Math.Vector3"
165{-# NOINLINE vector4 #-}
166vector4 :: Canonical
167vector4 = Canonical Pkg.linearAlgebra "Math.Vector4"
170{-# NOINLINE matrix4 #-}
171matrix4 :: Canonical
172matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
176-- IS KERNEL
179isKernel :: N.Name -> Bool
180isKernel name =
181 N.startsWith "Elm.Kernel." name
184getKernel :: N.Name -> N.Name
185getKernel name =
186 N.drop 11 name
189canonicalIsKernel :: Canonical -> Bool
190canonicalIsKernel (Canonical _ name) =
191 isKernel name
195-- BINARY
198instance Binary Canonical where
199 put (Canonical a b) =
200 put a >> put b
202 get =
203 liftM2 Canonical get get