1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Compiler.Module
4 ( Interface, Interfaces
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
34type Interface = Module.Interface
37type Interfaces = Module.Interfaces
40interfaceAliasedTypes :: Interface -> Map.Map Text PublicType.Type
41interfaceAliasedTypes interface =
42 Map.map Extract.extract (Module.iTypes interface)
45programTypes :: Interfaces -> ModuleName.Canonical -> Maybe PublicType.Program
47 Extract.extractProgram
54newtype RawForJson = RawForJson ModuleName.Raw
57fromJson :: RawForJson -> ModuleName.Raw
58fromJson (RawForJson raw) =
62qualifiedVar :: ModuleName.Canonical -> Text -> Text
68-- STRING CONVERSIONS for RAW NAMES
71nameToPath :: ModuleName.Raw -> FilePath
73 List.foldl1 (</>) (map Text.unpack (Text.splitOn "." name))
76nameToString :: ModuleName.Raw -> String
81nameFromText :: Text -> Maybe ModuleName.Raw
86hyphenate :: ModuleName.Raw -> Text
88 Text.replace "." "-" name
91dehyphenate :: Text -> Maybe ModuleName.Raw
96fromText :: Char -> Text -> Maybe ModuleName.Raw
100 Text.splitOn (Text.singleton sep) name
102 if all isGoodChunk chunks then Just name else Nothing
105isGoodChunk :: Text -> Bool
107 case Text.uncons chunk of
111 Just (first, rest) ->
112 Char.isUpper first && Text.all isGoodChar rest
115isGoodChar :: Char -> Bool
117 Char.isAlphaNum char || char == '_'
124instance Json.ToJSON RawForJson where
125 toJSON (RawForJson name) =
126 Json.toJSON (nameToString name)
129instance Json.FromJSON RawForJson where
130 parseJSON (Json.String text) =
131 case nameFromText text of
133 fail (Text.unpack text ++ " is not a valid module name")
136 return (RawForJson name)
139 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