1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE Rank2Types #-}
16import Data.Monoid ((<>))
17import qualified Data.Map as Map
18import qualified Data.Set as Set
19import qualified Data.Text as Text
21import qualified AST.Optimized as Opt
22import qualified AST.Module.Name as ModuleName
23import qualified Elm.Name as N
37 -> (Int -> Set.Set N.Name -> Set.Set Opt.Global -> Map.Map N.Name Int -> a -> r)
42run :: Tracker a -> (Set.Set N.Name, Set.Set Opt.Global, Map.Map N.Name Int, a)
44 k 0 Set.empty Set.empty Map.empty
45 (\_uid kernels globals fields value -> (kernels, globals, fields, value))
48generate :: Tracker N.Name
50 Tracker $ \n k g f ok ->
51 ok (n + 1) k g f ("_n" <> Text.pack (show n))
54registerKernel :: N.Name -> a -> Tracker a
55registerKernel name value =
56 Tracker $ \n k g f ok ->
57 ok n (Set.insert name k) g f value
60registerGlobal :: ModuleName.Canonical -> N.Name -> Tracker Opt.Expr
61registerGlobal home name =
62 Tracker $ \n k g f ok ->
63 let global = Opt.Global home name in
64 ok n k (Set.insert global g) f (Opt.VarGlobal global)
67registerField :: N.Name -> a -> Tracker a
68registerField name value =
69 Tracker $ \n k g fields ok ->
70 ok n k g (Map.insertWith (+) name 1 fields) value
73registerFields :: Map.Map N.Name v -> a -> Tracker a
74registerFields newFields value =
75 Tracker $ \n k g fields ok ->
76 ok n k g (Map.unionWith (+) fields (Map.map toOne newFields)) value
87instance Functor Tracker where
88 fmap func (Tracker kv) =
89 Tracker $ \n k g f ok ->
91 ok1 n1 k1 g1 f1 value =
92 ok n1 k1 g1 f1 (func value)
97instance Applicative Tracker where
100 Tracker $ \n k g f ok -> ok n k g f value
102 (<*>) (Tracker kf) (Tracker kv) =
103 Tracker $ \n0 k0 g0 f0 ok ->
105 ok1 n1 k1 g1 f1 func =
107 ok2 n2 k2 g2 f2 value =
108 ok n2 k2 g2 f2 (func value)
115instance Monad Tracker where
118 (>>=) (Tracker ka) callback =
119 Tracker $ \n k g f ok ->
123 Tracker kb -> kb n1 k1 g1 f1 ok
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