on 2deedfb help sign in
elk/src/Elm/Compiler/Objects.hs
82 lines 1.5 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler.Objects
3 ( Name.Target(..)
4 , JS.Mode(..)
5 , JS.generate
6 , JS.generateForRepl
7 , Opt.Graph
8 , empty
9 , union
10 , unions
11 , Kernel(..)
12 , fromKernels
13 )
14 where
17import qualified Data.List as List
18import qualified Data.Map as Map
20import qualified AST.Optimized as Opt
21import qualified AST.Module.Name as ModuleName
22import qualified Elm.Name as N
23import qualified Elm.Package as Pkg
24import qualified Generate.JavaScript as JS
25import qualified Generate.JavaScript.Name as Name
29-- COMBINE GRAPHS
32{-# NOINLINE empty #-}
33empty :: Opt.Graph
34empty =
35 Opt.Graph Map.empty Map.empty Map.empty
38union :: Opt.Graph -> Opt.Graph -> Opt.Graph
39union (Opt.Graph mains1 graph1 fields1) (Opt.Graph mains2 graph2 fields2) =
40 Opt.Graph
41 (Map.union mains1 mains2)
42 (Map.union graph1 graph2)
43 (Map.union fields1 fields2)
46unions :: [Opt.Graph] -> Opt.Graph
47unions graphs =
48 case graphs of
49 [] ->
50 empty
52 g:gs ->
53 List.foldl' union g gs
57-- KERNEL GRAPHS
60data Kernel =
61 Kernel
62 { _client :: Opt.KContent
63 , _server :: Maybe Opt.KContent
64 }
67fromKernels :: Map.Map N.Name Kernel -> Opt.Graph
68fromKernels kernels =
69 Opt.Graph
70 Map.empty
71 (Map.mapKeys toGlobal (Map.map toNode kernels))
72 Map.empty
75toGlobal :: N.Name -> Opt.Global
76toGlobal home =
77 Opt.Global (ModuleName.Canonical Pkg.kernel home) N.dollar
80toNode :: Kernel -> Opt.Node
81toNode (Kernel client server) =
82 Opt.Kernel client server