on 5fab52a help sign in
elk/src/AST/Module/Name.hs
106 lines 1.5 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module AST.Module.Name
4 ( Raw
5 , Canonical(..)
6 , inVirtualDom, inCore, inHtml, inBrowser
7 , toString, toText, canonicalToText
8 , isKernel, getKernel, canonicalIsKernel
9 )
10 where
12import Data.Binary
13import qualified Data.Text as Text
14import Data.Text (Text)
16import qualified Elm.Package as Package
20-- NAMES
23type Raw = Text -- must be non-empty
26data Canonical =
27 Canonical
28 { _package :: !Package.Name
29 , _module :: !Raw
30 }
31 deriving (Eq, Ord)
35-- HELPERS
38inVirtualDom :: Raw -> Canonical
39inVirtualDom raw =
40 Canonical Package.virtualDom raw
43inCore :: Raw -> Canonical
44inCore raw =
45 Canonical Package.core raw
48inHtml :: Raw -> Canonical
49inHtml raw =
50 Canonical Package.html raw
53inBrowser :: Raw -> Canonical
54inBrowser raw =
55 Canonical Package.browser raw
59-- CONVERSIONS
62toString :: Raw -> String
63toString =
64 Text.unpack
67{-# INLINE toText #-}
68toText :: Raw -> Text
69toText name =
70 name
73canonicalToText :: Canonical -> Text
74canonicalToText (Canonical _ name) =
75 toText name
79-- IS KERNEL
82isKernel :: Raw -> Bool
83isKernel name =
84 Text.isPrefixOf "Elm.Kernel." name
87getKernel :: Raw -> Text
88getKernel name =
89 Text.drop 11 name
92canonicalIsKernel :: Canonical -> Bool
93canonicalIsKernel (Canonical _ name) =
94 isKernel name
98-- BINARY
101instance Binary Canonical where
102 put (Canonical home name) =
103 put home >> put name
105 get =
106 Canonical <$> get <*> get