on bfae985 help sign in
elk/src/Elm/Compiler/Objects/Internal.hs
88 lines 1.4 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Elm.Compiler.Objects.Internal
4 ( Graph(..)
5 , fromModule
6 , union
7 , unions
8 , Roots
9 , root
10 , toGlobals
11 )
12 where
15import Control.Arrow (first)
16import Data.Binary
17import qualified Data.Map as Map
19import qualified AST.Expression.Optimized as Opt
20import qualified AST.Module.Name as ModuleName
21import qualified AST.Module as Module
22import qualified AST.Variable as Var
23import qualified Elm.Package as Pkg
27-- OBJECTS
30newtype Graph =
31 Graph (Map.Map Var.Global Opt.Decl)
35-- HELPERS
38fromModule :: Module.Optimized -> Graph
39fromModule (Module.Module home info) =
40 Graph $ Map.fromList $
41 map (first (Var.Global home)) (Module.program info)
44union :: Graph -> Graph -> Graph
45union (Graph objs1) (Graph objs2) =
46 Graph (Map.union objs1 objs2)
49unions :: [Graph] -> Graph
50unions graphs =
51 Graph (Map.unions (map destruct graphs))
54destruct :: Graph -> Map.Map Var.Global Opt.Decl
55destruct (Graph graph) =
56 graph
60-- ROOTS
63data Roots
64 = Main ModuleName.Canonical
67root :: Pkg.Name -> ModuleName.Raw -> Roots
68root pkg name =
69 Main (ModuleName.Canonical pkg name)
72toGlobals :: Roots -> [Var.Global]
73toGlobals roots =
74 case roots of
75 Main home ->
76 [ Var.Global home "main" ]
80-- BINARY
83instance Binary Graph where
84 put (Graph dict) =
85 put dict
87 get =
88 Graph <$> get