@@ -1,18 +1,17 @@
1module Elm.Compiler.Module
1module Elm.Compiler.Module
2 ( Interface, Interfaces
2 ( Interface, Interfaces
3− , Name(Name)
3+ , ModuleName.Raw
4 , nameToPath
4 , nameToPath
5 , nameToString, nameFromString
5 , nameToString, nameFromString
6 , hyphenate, dehyphenate
6 , hyphenate, dehyphenate
7+ , RawForJson(RawForJson), fromJson
7 , defaultImports
8 , defaultImports
8 , interfaceAliasedTypes
9 , interfaceAliasedTypes
9− , CanonicalName, canonicalName
10+ , ModuleName.Canonical(..), canonicalNameToJS
13−import Control.Monad (mzero)
14import qualified Data.Aeson as Json
14import qualified Data.Aeson as Json
16import qualified Data.Char as Char
15import qualified Data.Char as Char
17import qualified Data.List as List
16import qualified Data.List as List
18import qualified Data.Map as Map
17import qualified Data.Map as Map
@@ -24,7 +23,7 @@ import qualified AST.Module.Name as ModuleName
24import qualified Elm.Compiler.Imports as Imports
23import qualified Elm.Compiler.Imports as Imports
25import qualified Elm.Compiler.Type as Type
24import qualified Elm.Compiler.Type as Type
26import qualified Elm.Compiler.Type.Extract as Extract
25import qualified Elm.Compiler.Type.Extract as Extract
27−import qualified Elm.Package as Package
26+import qualified Generate.JavaScript.Variable as Gen
@@ -46,55 +45,56 @@ interfaceAliasedTypes interface =
49−newtype Name = Name ModuleName.Raw
48+newtype RawForJson = RawForJson ModuleName.Raw
53−type CanonicalName = ModuleName.Canonical
51+fromJson :: RawForJson -> ModuleName.Raw
52+fromJson (RawForJson raw) =
56−canonicalName :: Package.Name -> Name -> CanonicalName
57−canonicalName pkgName (Name name) =
58− ModuleName.Canonical pkgName name
56+canonicalNameToJS :: ModuleName.Canonical -> String
61−defaultImports :: [Name]
61+defaultImports :: [ModuleName.Raw]
62defaultImports =
62defaultImports =
63− map (Name . fst) Imports.defaults
63+ map fst Imports.defaults
67−-- STRING CONVERSIONS for NAMES
67+-- STRING CONVERSIONS for RAW NAMES
70−nameToPath :: Name -> FilePath
70+nameToPath :: ModuleName.Raw -> FilePath
71−nameToPath (Name names) =
71+nameToPath names =
72− List.foldl1 (</>) names
72+ List.foldl1 (</>) names
75−nameToString :: Name -> String
75+nameToString :: ModuleName.Raw -> String
76−nameToString (Name names) =
76+nameToString names =
77− List.intercalate "." names
77+ List.intercalate "." names
80−nameFromString :: String -> Maybe Name
80+nameFromString :: String -> Maybe ModuleName.Raw
81nameFromString =
81nameFromString =
82− fromString '.'
82+ fromString '.'
85−hyphenate :: Name -> String
85+hyphenate :: ModuleName.Raw -> String
86−hyphenate (Name names) =
86+hyphenate names =
87− List.intercalate "-" names
87+ List.intercalate "-" names
90−dehyphenate :: String -> Maybe Name
90+dehyphenate :: String -> Maybe ModuleName.Raw
91dehyphenate =
91dehyphenate =
92− fromString '-'
92+ fromString '-'
95−fromString :: Char -> String -> Maybe Name
95+fromString :: Char -> String -> Maybe ModuleName.Raw
96fromString sep raw =
96fromString sep raw =
97− Name `fmap` mapM isLegit names
97+ mapM isLegit names
100 filter (/= [sep]) (List.groupBy (\a b -> a /= sep && b /= sep) raw)
100 filter (/= [sep]) (List.groupBy (\a b -> a /= sep && b /= sep) raw)
@@ -115,28 +115,24 @@ fromString sep raw =
115-- JSON for NAME
115-- JSON for NAME
118−instance Json.ToJSON Name where
118+instance Json.ToJSON RawForJson where
119− toJSON name =
119+ toJSON (RawForJson name) =
120− Json.toJSON (nameToString name)
120+ Json.toJSON (nameToString name)
123−instance Json.FromJSON Name where
123+instance Json.FromJSON RawForJson where
124− parseJSON (Json.String text) =
124+ parseJSON (Json.String text) =
125− let rawName = Text.unpack text in
127+ Text.unpack text
126− case nameFromString rawName of
129+ case nameFromString rawString of
127− Nothing -> fail (rawName ++ " is not a valid module name")
131+ fail (rawString ++ " is not a valid module name")
128− Just name -> return name
130− parseJSON _ = mzero
133+ Just name ->
134+ return (RawForJson name)
137+ fail "expecting the module name to be a string"
137−instance Binary Name where