1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Compiler.Module
4 ( Interface, Interfaces
7 , nameToString, nameFromString
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
81nameFromString :: String -> Maybe ModuleName.Raw
86hyphenate :: ModuleName.Raw -> String
88 Text.unpack (Text.replace "." "-" names)
91dehyphenate :: String -> Maybe ModuleName.Raw
96fromString :: Char -> String -> Maybe ModuleName.Raw
98 do chunks <- mapM isLegit names
99 return (Text.pack (List.intercalate "." chunks))
102 filter (/= [sep]) (List.groupBy (\a b -> a /= sep && b /= sep) raw)
110 if Char.isUpper char && all legitChar rest then Just name else Nothing
113 Char.isAlphaNum char || char == '_'
120instance Json.ToJSON RawForJson where
121 toJSON (RawForJson name) =
122 Json.toJSON (nameToString name)
125instance Json.FromJSON RawForJson where
126 parseJSON (Json.String text) =
131 case nameFromString rawString of
133 fail (rawString ++ " 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