on 0da3204 help sign in
elk/src/Elm/Compiler/Objects.hs
73 lines 1.4 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.MainsBuilder(..)
8 , JS.MainTrie(..)
9 , JS.generateMains
10 , Opt.Graph
11 , empty
12 , union
13 , Kernel(..)
14 , fromKernels
15 )
16 where
19import qualified Data.Map as Map
21import qualified AST.Optimized as Opt
22import qualified AST.Module.Name as ModuleName
23import qualified Elm.Name as N
24import qualified Elm.Package as Pkg
25import qualified Generate.JavaScript as JS
26import qualified Generate.JavaScript.Name as Name
30-- COMBINE GRAPHS
33{-# NOINLINE empty #-}
34empty :: Opt.Graph
35empty =
36 Opt.Graph Map.empty Map.empty Map.empty
39union :: Opt.Graph -> Opt.Graph -> Opt.Graph
40union (Opt.Graph mains1 graph1 fields1) (Opt.Graph mains2 graph2 fields2) =
41 Opt.Graph
42 (Map.union mains1 mains2)
43 (Map.union graph1 graph2)
44 (Map.union fields1 fields2)
48-- KERNEL GRAPHS
51data Kernel =
52 Kernel
53 { _client :: Opt.KContent
54 , _server :: Maybe Opt.KContent
55 }
58fromKernels :: Map.Map N.Name Kernel -> Opt.Graph
59fromKernels kernels =
60 Opt.Graph
61 Map.empty
62 (Map.mapKeys toGlobal (Map.map toNode kernels))
63 Map.empty
66toGlobal :: N.Name -> Opt.Global
67toGlobal home =
68 Opt.Global (ModuleName.Canonical Pkg.kernel home) N.dollar
71toNode :: Kernel -> Opt.Node
72toNode (Kernel client server) =
73 Opt.Kernel client server