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 , ["List"] ==> ([], Var.Listing [Var.Value "::"] False)
26 , ["Maybe"] ==> ([], Var.Listing [maybe] False)
27 , ["Result"] ==> ([], Var.Listing [result] False)
28 , ["Signal"] ==> ([], Var.Listing [signal] False)
34 Var.Union "Maybe" Var.openListing
39 Var.Union "Result" Var.openListing
44 Var.Union "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, 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