@@ -11,6 +11,7 @@ module Elm.Compiler.Objects.Internal
1111 , lookup
1212 , Roots
1313 , mains
14+ , value
1415 , toGlobals
1516 )
1617 where
@@ -21,6 +22,7 @@ import Control.Arrow (first)
2122import Control.Monad (liftM, liftM2)
2223import Data.Binary
2324import qualified Data.Map as Map
25+import qualified Data.Text as Text
2426
2527import qualified AST.Expression.Optimized as Opt
2628import qualified AST.Module.Name as ModuleName
@@ -92,6 +94,7 @@ lookup var (SymbolTable symbols) =
9294
9395data Roots
9496 = Mains [ModuleName.Canonical]
97+ | Value ModuleName.Canonical Text.Text
9598
9699
97100mains :: [ModuleName.Canonical] -> Roots
@@ -99,11 +102,28 @@ mains =
99102 Mains
100103
101104
105+value :: ModuleName.Canonical -> String -> Roots
106+value home name =
107+ Value home (Text.pack name)
108+
109+
102110toGlobals :: Roots -> [Var.Global]
103111toGlobals roots =
104− case roots of
105− Mains modules ->
106− map (\home -> Var.Global home "main") modules
112+ hiddenDependencies ++
113+ case roots of
114+ Mains modules ->
115+ map (\home -> Var.Global home "main") modules
116+
117+ Value home name ->
118+ [ Var.Global home name ]
119+
120+
121+-- needed for (==) and toString
122+hiddenDependencies :: [Var.Global]
123+hiddenDependencies =
124+ [ Var.Global (ModuleName.inCore "Dict") "toList"
125+ , Var.Global (ModuleName.inCore "Set") "toList"
126+ ]
107127
108128
109129