Would it be possible to implement implicit importing in Elm? It should be able to know that any capitalized name followed by a dot is a module name
like when i put
Module.thing anywhere in my code it could just implicitly import Module
Because module names are tied to their path in the filesystem, this is technically achievable. In fact this is what OCaml already does with it’s modules.
I expect this is likely a design decision rather than a technological limitation. Being explicit about what dependencies are being pulled into a module makes it much easier to read code. It’s the same reason why we favour qualified imports vs
import Thing exposing (..).
As someone who has struggled with explicit vs implicit outside and inside programming their whole life, I very much appreciate Elm’s explicitness.
I wonder if the compiler has performance optimizations (as in how fast it can compile your project) based on the fact that it only needs to parse the first bit of each file to get to know the entire dependency tree?
You are absolutely right, it does!
I delved into the compiler source for my thesis. It generates a dependency tree quicker by only parsing imports. Then it can parallelize actual parsing and type checking on independent modules.
What if I have these modules:
and I do:
module Main exposing (f) import Foo.Bar as Foo f = Foo.g 42
Foo.g mean? Is it function from
Foo.Bar as Foo or from
Foo. I don’t think how this improves readability. I also have some experience working in OCaml and implicit imports are easily the thing I hate most about it.
Not really the same topic, but maybe addressing the same need: the Intellij Elm plugin can automatically import things. So like, if I want
Module.thing, I dont type
import Data.Module as Module first, I just type
Module.thing and the plugin asks me if I want to import
I love this feature. I have sort of forgotten how to import things manually.
But, its still really handy to have import statements. I still read them a lot, even if I dont have to type them.
Well, ReasonML/Ocaml seems to simply shadow the original Foo inside Main in a similar situation. So that’s one solution.
This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.