@@ -34,6 +34,7 @@ import Reporting.Doc ((<+>))
3434import qualified Reporting.Doc as D
3535import qualified Reporting.Task as Task
3636import qualified Reporting.Progress.Repl as Repl
37+import qualified Reporting.Render.Type.Localizer as L
3738
3839
3940
@@ -53,7 +54,7 @@ run () (Flags maybeAlternateInterpreter) =
5354 printWelcomeMessage
5455 settings <- initSettings
5556 let manager = Repl.runInputT settings (Repl.withInterrupt loop)
56− (exitCode,_,_) <- RWS.runRWST manager interpreter initalState
57+ (exitCode,_,_) <- RWS.runRWST manager interpreter initialState
5758 Exit.exitWith exitCode
5859
5960
@@ -107,7 +108,7 @@ eval input =
107108 return (Just Exit.ExitSuccess)
108109
109110 Reset ->
110− do RWS.put initalState
111+ do RWS.put initialState
111112 report "<reset>"
112113
113114 Help info ->
@@ -115,10 +116,14 @@ eval input =
115116
116117 Code entry ->
117118 Repl.handleInterrupt (report "<cancelled>") $
118− do state@(State _ imports types defs tricks) <- RWS.get
119+ do state@(State _ imports types defs tricks localizer) <- RWS.get
119120 case entry of
120− Elm.Import name src ->
121− interpret None $ state { _imports = Map.insert name src imports }
121+ Elm.Import name alias exposing src ->
122+ interpret None $
123+ state
124+ { _imports = Map.insert name src imports
125+ , _localizer = L.replAdd name alias exposing localizer
126+ }
122127
123128 Elm.Type name src ->
124129 interpret None $ state { _types = Map.insert name src types }
@@ -217,16 +222,17 @@ data State =
217222 , _types :: Map.Map N.Name Text.Text
218223 , _defs :: Map.Map N.Name Text.Text
219224 , _tricks :: [Text.Text]
225+ , _localizer :: L.Localizer
220226 }
221227
222228
223−initalState :: State
224−initalState =
225− State 0 Map.empty Map.empty Map.empty []
229+initialState :: State
230+initialState =
231+ State 0 Map.empty Map.empty Map.empty [] L.replEmpty
226232
227233
228234compile :: Output -> State -> Task.Task (Maybe FilePath)
229−compile output (State count imports types defs tricks) =
235+compile output (State count imports types defs tricks localizer) =
230236 let
231237 elmSourceCode =
232238 (<>) "module Elm_Repl exposing (..)\n\n" $
@@ -236,12 +242,12 @@ compile output (State count imports types defs tricks) =
236242 case output of
237243 None ->
238244 if Map.null types && Map.null defs && null tricks then
239− evaluate (elmSourceCode <> "unit = ()") Nothing
245+ evaluate localizer (elmSourceCode <> "unit = ()") Nothing
240246 else
241− evaluate elmSourceCode Nothing
247+ evaluate localizer elmSourceCode Nothing
242248
243249 Def name ->
244− evaluate elmSourceCode (Just name)
250+ evaluate localizer elmSourceCode (Just name)
245251
246252 Expr expr ->
247253 let
@@ -249,7 +255,7 @@ compile output (State count imports types defs tricks) =
249255 text = Text.replace "\n" "\n " expr
250256 def = N.toBuilder name <> " =\n " <> Text.encodeUtf8Builder text <> "\n"
251257 in
252− evaluate (elmSourceCode <> def) (Just name)
258+ evaluate localizer (elmSourceCode <> def) (Just name)
253259
254260
255261addLines :: Map.Map N.Name Text.Text -> B.Builder -> B.Builder
@@ -257,9 +263,9 @@ addLines dict builder =
257263 Map.foldr (\text b -> Text.encodeUtf8Builder text <> "\n" <> b) builder dict
258264
259265
260−evaluate :: B.Builder -> Maybe N.Name -> Task.Task (Maybe FilePath)
261−evaluate builder maybeName =
262− Project.compileForRepl (LBS.toStrict (B.toLazyByteString builder)) maybeName
266+evaluate :: L.Localizer -> B.Builder -> Maybe N.Name -> Task.Task (Maybe FilePath)
267+evaluate localizer builder maybeName =
268+ Project.compileForRepl localizer (LBS.toStrict (B.toLazyByteString builder)) maybeName
263269
264270
265271
@@ -279,7 +285,7 @@ initSettings =
279285
280286lookupCompletions :: String -> Runner [Repl.Completion]
281287lookupCompletions string =
282− do (State _ imports types defs _) <- RWS.get
288+ do (State _ imports types defs _ _) <- RWS.get
283289 return $
284290 addMatches string False defs $
285291 addMatches string False types $