1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE FlexibleInstances #-}
3{-# LANGUAGE OverloadedStrings #-}
5 ( Raw(..), Canonical(..), Home(..)
6 , local, topLevel, builtin, fromModule
7 , inCore, inHtml, cmd, sub
9 , is, isJson, isMaybe, isArray, isTask, isList
10 , isNative, isTuple, isPrimitive, isPrim, isLocal
16import Data.Monoid ((<>))
17import qualified Data.Set as Set
18import Data.Text (Text)
20import qualified AST.Helpers as Help
21import qualified AST.Module.Name as ModuleName
38 | Module !ModuleName.Canonical
39 | TopLevel !ModuleName.Canonical
56local :: Text -> Canonical
61topLevel :: ModuleName.Canonical -> Text -> Canonical
63 Canonical (TopLevel home) x
66builtin :: Text -> Canonical
71fromModule :: ModuleName.Canonical -> Text -> Canonical
73 Canonical (Module home) name
76inCore :: ModuleName.Raw -> Text -> Canonical
78 Canonical (Module (ModuleName.inCore home)) name
81inHtml :: ModuleName.Raw -> Text -> Canonical
83 Canonical (Module (ModuleName.inHtml home)) name
88 inCore "Platform.Cmd" "Cmd"
93 inCore "Platform.Sub" "Sub"
97-- VARIABLE RECOGNIZERS
100isLocalHome :: Home -> Bool
116isCons :: Canonical -> Bool
119 Canonical BuiltIn "::" ->
126is :: ModuleName.Raw -> Text -> Canonical -> Bool
128 var == inCore home name
131isJson :: Canonical -> Bool
133 is "Json.Encode" "Value"
136isMaybe :: Canonical -> Bool
140isArray :: Canonical -> Bool
145isTask :: Canonical -> Bool
150isList :: Canonical -> Bool
152 v == Canonical BuiltIn "List"
155isNative :: Canonical -> Bool
158 Canonical (Module name) _ ->
159 ModuleName.canonicalIsNative name
165isTuple :: Canonical -> Bool
168 Canonical BuiltIn name ->
175isPrimitive :: Canonical -> Bool
178 Canonical BuiltIn name ->
179 Set.member name primitiveSet
185primitiveSet :: Set.Set Text
187 Set.fromList ["Int","Float","String","Bool"]
190isPrim :: Text -> Canonical -> Bool
191isPrim prim (Canonical home name) =
200isLocal :: (Text -> Bool) -> Canonical -> Bool
201isLocal check (Canonical home name) =
214rawToText :: Raw -> Text
215rawToText (Raw name) =
219toText :: Canonical -> Text
220toText (Canonical home name) =
226 ModuleName.canonicalToText moduleName <> "." <> name
236-- BINARY SERIALIZATION
239instance Binary Canonical where
240 put (Canonical home name) =
243 putWord8 0 >> put name
246 putWord8 1 >> put path >> put name
249 putWord8 2 >> put path >> put name
252 putWord8 3 >> put name
257 0 -> Canonical BuiltIn <$> get
258 1 -> Canonical . Module <$> get <*> get
259 2 -> Canonical . TopLevel <$> get <*> get
260 3 -> Canonical Local <$> get
261 _ -> 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