1{-# LANGUAGE FlexibleContexts #-}
2module Transform.AddDefaultImports (add) where
4import Prelude hiding (maybe)
5import qualified Data.Map as Map
6import qualified Data.Set as Set
8import qualified AST.Module as Module
9import qualified AST.Variable as Var
13 Map.Map Module.Name ([String], Var.Listing Var.Value)
16-- DESCRIPTION OF DEFAULT IMPORTS
18(==>) :: a -> b -> (a,b)
22defaultImports :: ImportDict
25 [ ["Basics"] ==> ([], Var.openListing)
26 , ["Maybe"] ==> ([], Var.Listing [maybe] False)
27 , ["Result"] ==> ([], Var.Listing [result] False)
28 , ["Signal"] ==> ([], Var.Listing [signal] False)
34 Var.ADT "Maybe" Var.openListing
39 Var.ADT "Result" Var.openListing
44 Var.ADT "Signal" (Var.Listing [] False)
47-- ADDING DEFAULT IMPORTS TO A MODULE
49add :: Bool -> Module.Module exs body -> Module.Module exs body
50add needsDefaults (Module.Module moduleName path exports imports decls) =
51 Module.Module moduleName path exports ammendedImports decls
55 foldr addImport (if needsDefaults then defaultImports else Map.empty) imports
58importDictToList :: ImportDict -> [(Module.Name, Module.ImportMethod)]
59importDictToList dict =
60 concatMap toImports (Map.toList dict)
62 toImports (name, (qualifiers, listing@(Var.Listing explicits open))) =
63 map (\qualifier -> (name, Module.As qualifier)) qualifiers
65 if open || not (null explicits)
66 then [(name, Module.Open listing)]
70addImport :: (Module.Name, Module.ImportMethod) -> ImportDict -> ImportDict
71addImport (name, method) importDict =
72 Map.alter mergeMethods name importDict
74 mergeMethods :: Maybe ([String], Var.Listing Var.Value)
75 -> Maybe ([String], Var.Listing Var.Value)
77 let (qualifiers, listing) =
79 Nothing -> ([], Var.Listing [] False)
83 Module.As qualifier ->
84 Just (qualifier : qualifiers, listing)
86 Module.Open newListing ->
87 Just (qualifiers, mergeListings newListing listing)
89 mergeListings (Var.Listing explicits1 open1) (Var.Listing explicits2 open2) =
91 (Set.toList (Set.fromList (explicits1 ++ explicits2)))
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