on 422e250 help sign in
elk/src/Elm/Compiler/Objects.hs
71 lines 1.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler.Objects
3 ( Name.Target(..)
4 , JS.ReplBuilder(..)
5 , JS.generateForRepl
6 , JS.Mode(..)
7 , JS.generate
8 , Opt.Graph
9 , empty
10 , union
11 , Kernel(..)
12 , fromKernels
13 )
14 where
17import qualified Data.Map as Map
19import qualified AST.Optimized as Opt
20import qualified AST.Module.Name as ModuleName
21import qualified Elm.Name as N
22import qualified Elm.Package as Pkg
23import qualified Generate.JavaScript as JS
24import qualified Generate.JavaScript.Name as Name
28-- COMBINE GRAPHS
31{-# NOINLINE empty #-}
32empty :: Opt.Graph
33empty =
34 Opt.Graph Map.empty Map.empty Map.empty
37union :: Opt.Graph -> Opt.Graph -> Opt.Graph
38union (Opt.Graph mains1 graph1 fields1) (Opt.Graph mains2 graph2 fields2) =
39 Opt.Graph
40 (Map.union mains1 mains2)
41 (Map.union graph1 graph2)
42 (Map.union fields1 fields2)
46-- KERNEL GRAPHS
49data Kernel =
50 Kernel
51 { _client :: Opt.KContent
52 , _server :: Maybe Opt.KContent
53 }
56fromKernels :: Map.Map N.Name Kernel -> Opt.Graph
57fromKernels kernels =
58 Opt.Graph
59 Map.empty
60 (Map.mapKeys toGlobal (Map.map toNode kernels))
61 Map.empty
64toGlobal :: N.Name -> Opt.Global
65toGlobal home =
66 Opt.Global (ModuleName.Canonical Pkg.kernel home) N.dollar
69toNode :: Kernel -> Opt.Node
70toNode (Kernel client server) =
71 Opt.Kernel client server