1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
5 , Canonical(..), Home(..)
7 , local, topLevel, builtin, fromModule
8 , inCore, inHtml, cmd, sub
10 , is, isJson, isMaybe, isArray, isTask, isList
11 , isKernel, isTuple, isPrimitive, isPrim, isLocal
17import Data.Monoid ((<>))
18import qualified Data.Set as Set
19import Data.Text (Text)
21import qualified AST.Helpers as Help
22import qualified AST.Module.Name as ModuleName
39 | Module !ModuleName.Canonical
40 | TopLevel !ModuleName.Canonical
57data Global = Global !ModuleName.Canonical !Text
65local :: Text -> Canonical
70topLevel :: ModuleName.Canonical -> Text -> Canonical
72 Canonical (TopLevel home) x
75builtin :: Text -> Canonical
80fromModule :: ModuleName.Canonical -> Text -> Canonical
82 Canonical (Module home) name
85inCore :: ModuleName.Raw -> Text -> Canonical
87 Canonical (Module (ModuleName.inCore home)) name
90inHtml :: ModuleName.Raw -> Text -> Canonical
92 Canonical (Module (ModuleName.inHtml home)) name
97 inCore "Platform.Cmd" "Cmd"
102 inCore "Platform.Sub" "Sub"
106-- VARIABLE RECOGNIZERS
109isLocalHome :: Home -> Bool
125isCons :: Canonical -> Bool
128 Canonical BuiltIn "::" ->
135is :: ModuleName.Raw -> Text -> Canonical -> Bool
137 var == inCore home name
140isJson :: Canonical -> Bool
142 is "Json.Encode" "Value"
145isMaybe :: Canonical -> Bool
149isArray :: Canonical -> Bool
154isTask :: Canonical -> Bool
159isList :: Canonical -> Bool
161 var == Canonical BuiltIn "List"
164isKernel :: Canonical -> Bool
167 Canonical (Module name) _ ->
168 ModuleName.canonicalIsKernel name
174isTuple :: Canonical -> Bool
177 Canonical BuiltIn name ->
184isPrimitive :: Canonical -> Bool
187 Canonical BuiltIn name ->
188 Set.member name primitiveSet
194primitiveSet :: Set.Set Text
196 Set.fromList ["Int","Float","String","Bool"]
199isPrim :: Text -> Canonical -> Bool
200isPrim prim (Canonical home name) =
209isLocal :: (Text -> Bool) -> Canonical -> Bool
210isLocal check (Canonical home name) =
223rawToText :: Raw -> Text
224rawToText (Raw name) =
228toText :: Canonical -> Text
229toText (Canonical home name) =
235 ModuleName.canonicalToText moduleName <> "." <> name
245-- BINARY SERIALIZATION
248instance Binary Global where
249 put (Global home name) =
253 Global <$> get <*> get
256instance Binary Canonical where
257 put (Canonical home name) =
260 putWord8 0 >> put name
263 putWord8 1 >> put path >> put name
266 putWord8 2 >> put path >> put name
269 putWord8 3 >> put name
274 0 -> Canonical BuiltIn <$> get
275 1 -> Canonical . Module <$> get <*> get
276 2 -> Canonical . TopLevel <$> get <*> get
277 3 -> Canonical Local <$> get
278 _ -> error "Unexpected tag when deserializing canonical variable"
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