on dc356df help sign in
elk/src/AST/Module/Name.hs
188 lines 2.9 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 , 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 list #-}
70list :: Canonical
71list = Canonical Pkg.core N.list
74{-# NOINLINE array #-}
75array :: Canonical
76array = Canonical Pkg.core N.array
80-- EFFECTS
83{-# NOINLINE platform #-}
84platform :: Canonical
85platform = Canonical Pkg.core N.platform
88{-# NOINLINE cmd #-}
89cmd :: Canonical
90cmd = Canonical Pkg.core "Platform.Cmd"
93{-# NOINLINE sub #-}
94sub :: Canonical
95sub = Canonical Pkg.core "Platform.Sub"
99-- MISC
102{-# NOINLINE virtualDom #-}
103virtualDom :: Canonical
104virtualDom = Canonical Pkg.virtualDom "VirtualDom"
107{-# NOINLINE debug #-}
108debug :: Canonical
109debug = Canonical Pkg.core N.debug
112{-# NOINLINE bitwise #-}
113bitwise :: Canonical
114bitwise = Canonical Pkg.core N.bitwise
118-- JSON
121{-# NOINLINE jsonDecode #-}
122jsonDecode :: Canonical
123jsonDecode = Canonical Pkg.json "Json.Decode"
126{-# NOINLINE jsonEncode #-}
127jsonEncode :: Canonical
128jsonEncode = Canonical Pkg.json "Json.Encode"
132-- WEBGL
135{-# NOINLINE webgl #-}
136webgl :: Canonical
137webgl = Canonical Pkg.webgl "WebGL"
140{-# NOINLINE vector2 #-}
141vector2 :: Canonical
142vector2 = Canonical Pkg.linearAlgebra "Math.Vector2"
145{-# NOINLINE vector3 #-}
146vector3 :: Canonical
147vector3 = Canonical Pkg.linearAlgebra "Math.Vector3"
150{-# NOINLINE vector4 #-}
151vector4 :: Canonical
152vector4 = Canonical Pkg.linearAlgebra "Math.Vector4"
155{-# NOINLINE matrix4 #-}
156matrix4 :: Canonical
157matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
161-- IS KERNEL
164isKernel :: N.Name -> Bool
165isKernel name =
166 N.startsWith "Elm.Kernel." name
169getKernel :: N.Name -> N.Name
170getKernel name =
171 N.drop 11 name
174canonicalIsKernel :: Canonical -> Bool
175canonicalIsKernel (Canonical _ name) =
176 isKernel name
180-- BINARY
183instance Binary Canonical where
184 put (Canonical a b) =
185 put a >> put b
187 get =
188 liftM2 Canonical get get