on ba4c3df help sign in
elk/src/Elm/Compiler/Objects.hs
87 lines 1.5 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler.Objects
3 ( JS.Mode(..)
4 , Name.Target(..)
5 , JS.generate
6 , JS.Roots
7 , mains
8 , value
9 , Opt.Graph
10 , empty
11 , union
12 , Kernel(..)
13 , fromKernels
14 )
15 where
18import qualified Data.Map as Map
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
24import qualified Elm.Package as Pkg
25import qualified Generate.JavaScript as JS
26import qualified Generate.JavaScript.Name as Name
30-- ROOTS
33mains :: [ModuleName.Canonical] -> JS.Roots
34mains =
35 JS.Mains
38value :: ModuleName.Canonical -> String -> JS.Roots
39value home name =
40 JS.Value home (Text.pack name)
44-- COMBINE GRAPHS
47{-# NOINLINE empty #-}
48empty :: Opt.Graph
49empty =
50 Opt.Graph Map.empty Map.empty Map.empty
53union :: Opt.Graph -> Opt.Graph -> Opt.Graph
54union (Opt.Graph mains1 graph1 fields1) (Opt.Graph mains2 graph2 fields2) =
55 Opt.Graph
56 (Map.union mains1 mains2)
57 (Map.union graph1 graph2)
58 (Map.union fields1 fields2)
62-- KERNEL GRAPHS
65data Kernel =
66 Kernel
67 { _client :: Opt.KContent
68 , _server :: Maybe Opt.KContent
69 }
72fromKernels :: Map.Map N.Name Kernel -> Opt.Graph
73fromKernels kernels =
74 Opt.Graph
75 Map.empty
76 (Map.mapKeys toGlobal (Map.map toNode kernels))
77 Map.empty
80toGlobal :: N.Name -> Opt.Global
81toGlobal home =
82 Opt.Global (ModuleName.Canonical Pkg.kernel home) N.dollar
85toNode :: Kernel -> Opt.Node
86toNode (Kernel client server) =
87 Opt.Kernel client server