Importing specific function vs exposing all in elm












1















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 ?










share|improve this question



























    1















    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 ?










    share|improve this question

























      1












      1








      1








      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 ?










      share|improve this question














      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 15 '18 at 2:19









      Nicola PedrettiNicola Pedretti

      1,99411724




      1,99411724
























          2 Answers
          2






          active

          oldest

          votes


















          4














          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.






          share|improve this answer































            2














            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






            share|improve this answer























              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
              });


              }
              });














              draft saved

              draft discarded


















              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









              4














              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.






              share|improve this answer




























                4














                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.






                share|improve this answer


























                  4












                  4








                  4







                  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.






                  share|improve this answer













                  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.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 15 '18 at 8:52









                  Ju LiuJu Liu

                  3,681817




                  3,681817

























                      2














                      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






                      share|improve this answer




























                        2














                        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






                        share|improve this answer


























                          2












                          2








                          2







                          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






                          share|improve this answer













                          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







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 15 '18 at 6:05









                          farmiofarmio

                          2,1972916




                          2,1972916






























                              draft saved

                              draft discarded




















































                              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.




                              draft saved


                              draft discarded














                              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





















































                              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







                              Popular posts from this blog

                              Xamarin.iOS Cant Deploy on Iphone

                              Glorious Revolution

                              Dulmage-Mendelsohn matrix decomposition in Python