1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Compiler.Module
4 ( Module.Interface, Module.Interfaces, Module.privatize
7 , nameToString, nameFromText
8 , hyphenate, dehyphenate
9 , RawForJson(RawForJson), fromJson
10 , interfaceAliasedTypes, programTypes
11 , ModuleName.Canonical(..), qualifiedVar
15import qualified Data.Aeson as Json
16import qualified Data.Char as Char
17import qualified Data.List as List
18import qualified Data.Map as Map
19import qualified Data.Text as Text
20import Data.Text (Text)
21import System.FilePath ((</>))
23import qualified AST.Module as Module
24import qualified AST.Module.Name as ModuleName
25import qualified Elm.Compiler.Type as PublicType
26import qualified Elm.Compiler.Type.Extract as Extract
27import qualified Generate.JavaScript.Variable as Gen
34interfaceAliasedTypes :: Module.Interface -> Map.Map Text PublicType.Type
35interfaceAliasedTypes interface =
36 Map.map Extract.extract (Module.iTypes interface)
39programTypes :: Module.Interfaces -> ModuleName.Canonical -> Maybe PublicType.Program
41 Extract.extractProgram
48newtype RawForJson = RawForJson ModuleName.Raw
51fromJson :: RawForJson -> ModuleName.Raw
52fromJson (RawForJson raw) =
56qualifiedVar :: ModuleName.Canonical -> Text -> Text
62-- STRING CONVERSIONS for RAW NAMES
65nameToPath :: ModuleName.Raw -> FilePath
67 List.foldl1 (</>) (map Text.unpack (Text.splitOn "." name))
70nameToString :: ModuleName.Raw -> String
75nameFromText :: Text -> Maybe ModuleName.Raw
80hyphenate :: ModuleName.Raw -> Text
82 Text.replace "." "-" name
85dehyphenate :: Text -> Maybe ModuleName.Raw
90fromText :: Char -> Text -> Maybe ModuleName.Raw
94 Text.splitOn (Text.singleton sep) name
96 if all isGoodChunk chunks then Just name else Nothing
99isGoodChunk :: Text -> Bool
101 case Text.uncons chunk of
105 Just (first, rest) ->
106 Char.isUpper first && Text.all isGoodChar rest
109isGoodChar :: Char -> Bool
111 Char.isAlphaNum char || char == '_'
118instance Json.ToJSON RawForJson where
119 toJSON (RawForJson name) =
120 Json.toJSON (nameToString name)
123instance Json.FromJSON RawForJson where
124 parseJSON (Json.String text) =
125 case nameFromText text of
127 fail (Text.unpack text ++ " is not a valid module name")
130 return (RawForJson name)
133 fail "expecting the module name to be a string"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list