Importing specific function vs exposing all in elm
When I import a library in elm, will importing only specific functions be more efficient than exposing everything ?
For example, when I import the Html module I usually just expose everything
import Html exposing (..)
This is convenient so as i keep writing I don't have to keep modifying the definition to add more Html tags, but is it efficient ? Will the compiler realize I don't need the entire library in my source code or will it import it all ?
elm
add a comment |
When I import a library in elm, will importing only specific functions be more efficient than exposing everything ?
For example, when I import the Html module I usually just expose everything
import Html exposing (..)
This is convenient so as i keep writing I don't have to keep modifying the definition to add more Html tags, but is it efficient ? Will the compiler realize I don't need the entire library in my source code or will it import it all ?
elm
add a comment |
When I import a library in elm, will importing only specific functions be more efficient than exposing everything ?
For example, when I import the Html module I usually just expose everything
import Html exposing (..)
This is convenient so as i keep writing I don't have to keep modifying the definition to add more Html tags, but is it efficient ? Will the compiler realize I don't need the entire library in my source code or will it import it all ?
elm
When I import a library in elm, will importing only specific functions be more efficient than exposing everything ?
For example, when I import the Html module I usually just expose everything
import Html exposing (..)
This is convenient so as i keep writing I don't have to keep modifying the definition to add more Html tags, but is it efficient ? Will the compiler realize I don't need the entire library in my source code or will it import it all ?
elm
elm
asked Nov 15 '18 at 2:19
Nicola PedrettiNicola Pedretti
1,99411724
1,99411724
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
I don't think there is a performance advantage in importing exactly the functions that you want to use. As farmio mentioned, before 0.19 the whole module is imported anyway and after 0.19 you can pass --optimize
to eliminate dead code.
However, I strongly recommend against importing all the functions exposed by a module because it makes code very hard to read. Imagine this case:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
We have pulled all the functions from those four modules into our own namespace, so everytime I read the name of a function which is not defined I have to guess where that function is coming from. The alternative is just exposing types but never functions:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
In this way, not once you will have to guess where the function is coming from.
add a comment |
Since elm 0.19 the compiler has function level dead code elimination. So your compiled App should be the same either way.
I'm not sure if exposing only used functions would shorten compile time tough.
https://elm-lang.org/blog/small-assets-without-the-headache
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311507%2fimporting-specific-function-vs-exposing-all-in-elm%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I don't think there is a performance advantage in importing exactly the functions that you want to use. As farmio mentioned, before 0.19 the whole module is imported anyway and after 0.19 you can pass --optimize
to eliminate dead code.
However, I strongly recommend against importing all the functions exposed by a module because it makes code very hard to read. Imagine this case:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
We have pulled all the functions from those four modules into our own namespace, so everytime I read the name of a function which is not defined I have to guess where that function is coming from. The alternative is just exposing types but never functions:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
In this way, not once you will have to guess where the function is coming from.
add a comment |
I don't think there is a performance advantage in importing exactly the functions that you want to use. As farmio mentioned, before 0.19 the whole module is imported anyway and after 0.19 you can pass --optimize
to eliminate dead code.
However, I strongly recommend against importing all the functions exposed by a module because it makes code very hard to read. Imagine this case:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
We have pulled all the functions from those four modules into our own namespace, so everytime I read the name of a function which is not defined I have to guess where that function is coming from. The alternative is just exposing types but never functions:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
In this way, not once you will have to guess where the function is coming from.
add a comment |
I don't think there is a performance advantage in importing exactly the functions that you want to use. As farmio mentioned, before 0.19 the whole module is imported anyway and after 0.19 you can pass --optimize
to eliminate dead code.
However, I strongly recommend against importing all the functions exposed by a module because it makes code very hard to read. Imagine this case:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
We have pulled all the functions from those four modules into our own namespace, so everytime I read the name of a function which is not defined I have to guess where that function is coming from. The alternative is just exposing types but never functions:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
In this way, not once you will have to guess where the function is coming from.
I don't think there is a performance advantage in importing exactly the functions that you want to use. As farmio mentioned, before 0.19 the whole module is imported anyway and after 0.19 you can pass --optimize
to eliminate dead code.
However, I strongly recommend against importing all the functions exposed by a module because it makes code very hard to read. Imagine this case:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
We have pulled all the functions from those four modules into our own namespace, so everytime I read the name of a function which is not defined I have to guess where that function is coming from. The alternative is just exposing types but never functions:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
In this way, not once you will have to guess where the function is coming from.
answered Nov 15 '18 at 8:52
Ju LiuJu Liu
3,681817
3,681817
add a comment |
add a comment |
Since elm 0.19 the compiler has function level dead code elimination. So your compiled App should be the same either way.
I'm not sure if exposing only used functions would shorten compile time tough.
https://elm-lang.org/blog/small-assets-without-the-headache
add a comment |
Since elm 0.19 the compiler has function level dead code elimination. So your compiled App should be the same either way.
I'm not sure if exposing only used functions would shorten compile time tough.
https://elm-lang.org/blog/small-assets-without-the-headache
add a comment |
Since elm 0.19 the compiler has function level dead code elimination. So your compiled App should be the same either way.
I'm not sure if exposing only used functions would shorten compile time tough.
https://elm-lang.org/blog/small-assets-without-the-headache
Since elm 0.19 the compiler has function level dead code elimination. So your compiled App should be the same either way.
I'm not sure if exposing only used functions would shorten compile time tough.
https://elm-lang.org/blog/small-assets-without-the-headache
answered Nov 15 '18 at 6:05
farmiofarmio
2,1972916
2,1972916
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53311507%2fimporting-specific-function-vs-exposing-all-in-elm%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown