on 1762552 help sign in
elk/src/AST/Module/Name.hs
122 lines 1.9 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Module.Name
4 ( Canonical(..)
5 , basics, maybe, list, array
6 , platform, cmd, sub
7 , jsonDecode, jsonEncode
8 , canonicalToText
9 , isKernel, getKernel, canonicalIsKernel
10 )
11 where
14import Prelude hiding (maybe)
15import Control.Monad (liftM2)
16import Data.Binary
17import qualified Data.Text as Text
18import Data.Text (Text)
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 (Eq, Ord)
37-- HELPERS
40{-# NOINLINE basics #-}
41basics :: Canonical
42basics = Canonical Pkg.core "Basics"
45{-# NOINLINE maybe #-}
46maybe :: Canonical
47maybe = Canonical Pkg.core "Maybe"
50{-# NOINLINE list #-}
51list :: Canonical
52list = Canonical Pkg.core "List"
55{-# NOINLINE array #-}
56array :: Canonical
57array = Canonical Pkg.core "Array"
60{-# NOINLINE platform #-}
61platform :: Canonical
62platform = Canonical Pkg.core "Platform"
65{-# NOINLINE cmd #-}
66cmd :: Canonical
67cmd = Canonical Pkg.core "Platform.Cmd"
70{-# NOINLINE sub #-}
71sub :: Canonical
72sub = Canonical Pkg.core "Platform.Sub"
75{-# NOINLINE jsonDecode #-}
76jsonDecode :: Canonical
77jsonDecode = Canonical Pkg.core "Json.Decode"
80{-# NOINLINE jsonEncode #-}
81jsonEncode :: Canonical
82jsonEncode = Canonical Pkg.core "Json.Encode"
86-- CONVERSIONS
89canonicalToText :: Canonical -> Text
90canonicalToText (Canonical _ name) =
91 name
95-- IS KERNEL
98isKernel :: N.Name -> Bool
99isKernel name =
100 Text.isPrefixOf "Elm.Kernel." name
103getKernel :: N.Name -> Text
104getKernel name =
105 Text.drop 11 name
108canonicalIsKernel :: Canonical -> Bool
109canonicalIsKernel (Canonical _ name) =
110 isKernel name
114-- BINARY
117instance Binary Canonical where
118 put (Canonical a b) =
119 put a >> put b
121 get =
122 liftM2 Canonical get get