on 5c0addd help sign in
elk/src/AST/Module/Name.hs
185 lines 2.8 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Module.Name
4 ( Canonical(..)
5 , basics, char, string, debug
6 , maybe, list, array
7 , platform, cmd, sub
8 , jsonDecode, jsonEncode
9 , webgl, vector2, vector3, vector4, matrix4
10 , canonicalToText
11 , isKernel, getKernel, canonicalIsKernel
12 )
13 where
16import Prelude hiding (maybe)
17import Control.Monad (liftM2)
18import Data.Binary
19import qualified Data.Text as Text
20import Data.Text (Text)
22import qualified Elm.Name as N
23import qualified Elm.Package as Pkg
27-- NAMES
30data Canonical =
31 Canonical
32 { _package :: !Pkg.Name
33 , _module :: !N.Name
34 }
35 deriving (Ord)
38instance Eq Canonical where
39 (==) (Canonical pkg home) (Canonical pkg' home') =
40 home == home' && pkg == pkg'
44-- PRIMITIVES
47{-# NOINLINE basics #-}
48basics :: Canonical
49basics = Canonical Pkg.core "Basics"
52{-# NOINLINE char #-}
53char :: Canonical
54char = Canonical Pkg.core N.char
57{-# NOINLINE string #-}
58string :: Canonical
59string = Canonical Pkg.core N.string
62{-# NOINLINE debug #-}
63debug :: Canonical
64debug = Canonical Pkg.core N.debug
68-- CONTAINERS
71{-# NOINLINE maybe #-}
72maybe :: Canonical
73maybe = Canonical Pkg.core N.maybe
76{-# NOINLINE list #-}
77list :: Canonical
78list = Canonical Pkg.core N.list
81{-# NOINLINE array #-}
82array :: Canonical
83array = Canonical Pkg.core N.array
87-- EFFECTS
90{-# NOINLINE platform #-}
91platform :: Canonical
92platform = Canonical Pkg.core "Platform"
95{-# NOINLINE cmd #-}
96cmd :: Canonical
97cmd = Canonical Pkg.core "Platform.Cmd"
100{-# NOINLINE sub #-}
101sub :: Canonical
102sub = Canonical Pkg.core "Platform.Sub"
106-- JSON
109{-# NOINLINE jsonDecode #-}
110jsonDecode :: Canonical
111jsonDecode = Canonical Pkg.core "Json.Decode"
114{-# NOINLINE jsonEncode #-}
115jsonEncode :: Canonical
116jsonEncode = Canonical Pkg.core "Json.Encode"
120-- WEBGL
123{-# NOINLINE webgl #-}
124webgl :: Canonical
125webgl = Canonical Pkg.webgl "WebGL"
128{-# NOINLINE vector2 #-}
129vector2 :: Canonical
130vector2 = Canonical Pkg.linearAlgebra "Math.Vector2"
133{-# NOINLINE vector3 #-}
134vector3 :: Canonical
135vector3 = Canonical Pkg.linearAlgebra "Math.Vector3"
138{-# NOINLINE vector4 #-}
139vector4 :: Canonical
140vector4 = Canonical Pkg.linearAlgebra "Math.Vector4"
143{-# NOINLINE matrix4 #-}
144matrix4 :: Canonical
145matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
149-- CONVERSIONS
152canonicalToText :: Canonical -> Text
153canonicalToText (Canonical _ name) =
154 name
158-- IS KERNEL
161isKernel :: N.Name -> Bool
162isKernel name =
163 Text.isPrefixOf "Elm.Kernel." name
166getKernel :: N.Name -> Text
167getKernel name =
168 Text.drop 11 name
171canonicalIsKernel :: Canonical -> Bool
172canonicalIsKernel (Canonical _ name) =
173 isKernel name
177-- BINARY
180instance Binary Canonical where
181 put (Canonical a b) =
182 put a >> put b
184 get =
185 liftM2 Canonical get get