You may run into situations where you want to generate a function, and then call that generated function somewhere else.
This module will help you do that.
Here's an example, let's define a new function called add42
renderFile =
let
add42 =
Elm.Declare.fn "add42"
( "firstInt", Nothing )
(\firstArgument ->
Elm.plus
(Elm.int 42)
firstArgument
)
in
Elm.file [ "MyFile" ]
-- add our declaration to our file
[ add42.declaration
-- and another place where we call that function!
, Elm.declaration "mySweetNumber"
(add42.call (Elm.int 82))
]
Depending on your situation, you may want to define a function in one file, but call it from another.
In that case you can do something like this using callFrom
:
renderFileList =
let
add42 =
Elm.Declare.fn "add42"
( "firstInt", Nothing )
(\firstArgument ->
Elm.plus
(Elm.int 42)
firstArgument
)
in
[ Elm.file [ "MyFile" ]
-- add our declaration to our file
[ add42.declaration
]
, Elm.file [ "MyOtherFile" ]
-- and call from another file
[ Elm.declaration "mySweetNumber"
(add42.callFrom [ "MyFile" ] (Elm.int 82))
]
]
fn : String -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
fn2 : String -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
fn3 : String -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
fn4 : String -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
fn5 : String -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
fn6 : String -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> ( String, Maybe Elm.Annotation.Annotation ) -> (Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }
value : String -> Elm.Expression -> { declaration : Elm.Declaration, value : Elm.Expression, valueFrom : List String -> Elm.Expression }
function : String -> List ( String, Maybe Elm.Annotation.Annotation ) -> (List Elm.Expression -> Elm.Expression) -> { declaration : Elm.Declaration, call : List Elm.Expression -> Elm.Expression, callFrom : List String -> List Elm.Expression -> Elm.Expression, value : List String -> Elm.Expression }