So I was playing around in the Elm REPL with various Task functions and stumbled onto the following: > Task.onError (Task.fail "error message") (always Task.succeed 3) <task> : Task.Task a String and I thought huh, that's funny, I was expecting Task.Task a number. Then I realized that I had forgotten some parentheses: > Task.onError (Task.fail "error message") (always (Task.succeed 3)) <task> : Task.Task a number
In the first case, always is taking two arguments (instead of one as usual) and simply returning the first argument (throwing away the second), so the code is equivalent to > Task.onError (Task.fail "error message") Task.succeed <task> : Task.Task a String which basically just ends up meaning 'take the error result and promote it to the success result'. In my case the two resulting tasks have different types, but I can imagine a case like > Task.onError (Task.fail "error message") (always Task.succeed "fallback value") <task> : Task.Task a String where I meant to provide a fallback value in the case of an error but end up just using the error message instead. In general I've found how always reads in code to be quite pleasing, but I have to admit this is an argument for using a lambda instead: > Task.onError (Task.fail "error message") (\error -> Task.succeed "fallback value") <task> : Task.Task a number and > Task.onError (Task.fail "error message") (\error -> (Task.succeed "fallback value")) <task> : Task.Task a number are equivalent, very clear, and it's pretty obvious that the latter just has superfluous parentheses. Or maybe this is just a rule to keep in mind, and perhaps something for future Elm linters to check - make sure you only pass one argument to always ! -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
