on master help sign in
cosmetic / add strictness to Canonical module names
79dee76Evan Czaplicki
src/AST/Module/Name.hs+34−7
@@ -1,6 +1,13 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3−module AST.Module.Name where
3+module AST.Module.Name
4+ ( Raw
5+ , Canonical(..)
6+ , inVirtualDom, inCore, inHtml
7+ , toString, toText, canonicalToText
8+ , isNative, canonicalIsNative
9+ )
10+ where
4
11
5import Data.Binary
12import Data.Binary
6import qualified Data.Text as Text
13import qualified Data.Text as Text
@@ -9,17 +16,25 @@ import Data.Text (Text)
9import qualified Elm.Package as Package
16import qualified Elm.Package as Package
10
17
11
18
19+
20+-- NAMES
21+
22+
12type Raw = Text -- must be non-empty
23type Raw = Text -- must be non-empty
13
24
14
25
15data Canonical =
26data Canonical =
16 Canonical
27 Canonical
17− { _package :: Package.Name
28+ { _package :: !Package.Name
18− , _module :: Raw
29+ , _module :: !Raw
19 }
30 }
20 deriving (Eq, Ord)
31 deriving (Eq, Ord)
21
32
22
33
34+
35+-- HELPERS
36+
37+
23inVirtualDom :: Raw -> Canonical
38inVirtualDom :: Raw -> Canonical
24inVirtualDom raw =
39inVirtualDom raw =
25 Canonical Package.virtualDom raw
40 Canonical Package.virtualDom raw
@@ -35,6 +50,10 @@ inHtml raw =
35 Canonical Package.html raw
50 Canonical Package.html raw
36
51
37
52
53+
54+-- CONVERSIONS
55+
56+
38toString :: Raw -> String
57toString :: Raw -> String
39toString =
58toString =
40 Text.unpack
59 Text.unpack
@@ -51,6 +70,10 @@ canonicalToText (Canonical _ name) =
51 toText name
70 toText name
52
71
53
72
73+
74+-- IS NATIVE
75+
76+
54isNative :: Raw -> Bool
77isNative :: Raw -> Bool
55isNative name =
78isNative name =
56 Text.isPrefixOf "Native." name
79 Text.isPrefixOf "Native." name
@@ -61,9 +84,13 @@ canonicalIsNative (Canonical _ name) =
61 isNative name
84 isNative name
62
85
63
86
87+
88+-- BINARY
89+
90+
64instance Binary Canonical where
91instance Binary Canonical where
65− put (Canonical home name) =
92+ put (Canonical home name) =
66− put home >> put name
93+ put home >> put name
67
94
68− get =
95+ get =
69− Canonical <$> get <*> get
96+ Canonical <$> get <*> get