on fdf2d75 help sign in
198 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, result, list, array, 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 tuple #-}
85tuple :: Canonical
86tuple = Canonical Pkg.core N.tuple
90-- EFFECTS
93{-# NOINLINE platform #-}
94platform :: Canonical
95platform = Canonical Pkg.core N.platform
98{-# NOINLINE cmd #-}
99cmd :: Canonical
100cmd = Canonical Pkg.core "Platform.Cmd"
103{-# NOINLINE sub #-}
104sub :: Canonical
105sub = Canonical Pkg.core "Platform.Sub"
109-- MISC
112{-# NOINLINE virtualDom #-}
113virtualDom :: Canonical
114virtualDom = Canonical Pkg.virtualDom "VirtualDom"
117{-# NOINLINE debug #-}
118debug :: Canonical
119debug = Canonical Pkg.core N.debug
122{-# NOINLINE bitwise #-}
123bitwise :: Canonical
124bitwise = Canonical Pkg.core N.bitwise
128-- JSON
131{-# NOINLINE jsonDecode #-}
132jsonDecode :: Canonical
133jsonDecode = Canonical Pkg.json "Json.Decode"
136{-# NOINLINE jsonEncode #-}
137jsonEncode :: Canonical
138jsonEncode = Canonical Pkg.json "Json.Encode"
142-- WEBGL
145{-# NOINLINE webgl #-}
146webgl :: Canonical
147webgl = Canonical Pkg.webgl "WebGL"
150{-# NOINLINE vector2 #-}
151vector2 :: Canonical
152vector2 = Canonical Pkg.linearAlgebra "Math.Vector2"
155{-# NOINLINE vector3 #-}
156vector3 :: Canonical
157vector3 = Canonical Pkg.linearAlgebra "Math.Vector3"
160{-# NOINLINE vector4 #-}
161vector4 :: Canonical
162vector4 = Canonical Pkg.linearAlgebra "Math.Vector4"
165{-# NOINLINE matrix4 #-}
166matrix4 :: Canonical
167matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
171-- IS KERNEL
174isKernel :: N.Name -> Bool
175isKernel name =
176 N.startsWith "Elm.Kernel." name
179getKernel :: N.Name -> N.Name
180getKernel name =
181 N.drop 11 name
184canonicalIsKernel :: Canonical -> Bool
185canonicalIsKernel (Canonical _ name) =
186 isKernel name
190-- BINARY
193instance Binary Canonical where
194 put (Canonical a b) =
195 put a >> put b
197 get =
198 liftM2 Canonical get get