1{-# LANGUAGE FlexibleContexts #-}
2module Transform.AddDefaultImports (add, defaultImports) where
4import Prelude hiding (maybe)
5import qualified Data.Map as Map
7import qualified AST.Module as Module
8import qualified AST.Variable as Var
12 Map.Map Module.Name ([String], Var.Listing Var.Value)
15-- DESCRIPTION OF DEFAULT IMPORTS
17(==>) :: a -> b -> (a,b)
21defaultImports :: ImportDict
24 [ ["Basics"] ==> ([], Var.openListing)
25 , ["Maybe"] ==> ([], Var.Listing [maybe] False)
26 , ["Result"] ==> ([], Var.Listing [result] False)
27 , ["Signal"] ==> ([], Var.Listing [signal] False)
33 Var.ADT "Maybe" Var.openListing
38 Var.ADT "Result" Var.openListing
43 Var.ADT "Signal" (Var.Listing [] False)
46-- ADDING DEFAULT IMPORTS TO A MODULE
48add :: Bool -> Module.Module exs body -> Module.Module exs body
49add needsDefaults (Module.Module moduleName path exports imports decls) =
50 Module.Module moduleName path exports ammendedImports decls
54 foldr addImport (if needsDefaults then defaultImports else Map.empty) imports
57importDictToList :: ImportDict -> [(Module.Name, Module.ImportMethod)]
58importDictToList dict =
59 concatMap toImports (Map.toList dict)
61 toImports (name, (qualifiers, listing@(Var.Listing explicits open))) =
62 map (\qualifier -> (name, Module.As qualifier)) qualifiers
64 if open || not (null explicits)
65 then [(name, Module.Open listing)]
69addImport :: (Module.Name, Module.ImportMethod) -> ImportDict -> ImportDict
70addImport (name, method) importDict =
71 Map.alter mergeMethods name importDict
73 mergeMethods :: Maybe ([String], Var.Listing Var.Value)
74 -> Maybe ([String], Var.Listing Var.Value)
76 let (qualifiers, listing) =
78 Nothing -> ([], Var.Listing [] False)
82 Module.As qualifier ->
83 Just (qualifier : qualifiers, listing)
85 Module.Open newListing ->
86 Just (qualifiers, newListing)
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