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:
- Main
- Foo.Bar
- Foo
and I do:
module Main exposing (f)
import Foo.Bar as Foo
f = Foo.g 42
What does 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 Data.Module
as Module
.
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.