Skip to content

Instantly share code, notes, and snippets.

@deepak
Last active September 13, 2016 06:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deepak/0b0e46922f61afeff2dc5ac10da19270 to your computer and use it in GitHub Desktop.
Save deepak/0b0e46922f61afeff2dc5ac10da19270 to your computer and use it in GitHub Desktop.
moving from Elm's general type to specific type
module Build exposing (..)
import Debug
type alias Foobar number =
{ foo : number, bar : number }
build : number -> number -> { foo : number, bar : number }
build a b =
{ foo = a, bar = b }
buildNumber : number -> number -> { foo : number, bar : number }
buildNumber foo bar =
{ foo = foo, bar = bar }
-- inferred type on `elm-repl` is different
-- it is
-- a -> b -> { bar : b, foo : a }
-- but this also does not throw any error
buildFoobar : number -> number -> Foobar number
buildFoobar foo bar =
{ foo = foo, bar = bar }
buildFoobar' : number -> number -> Foobar number
buildFoobar' foo bar =
Foobar foo bar
-- calling `buildFoobar` from the `elm-repl` does give `Foobar`
-- import Build
-- (Debug.log "buildNumber: " (Build.buildNumber 1 2))
-- (Debug.log "buildNumber: " (Build.buildFoobar 1 2))
-- (Debug.log "buildNumber: " (Build.buildFoobar' 1 2))
--
--
-- elm-format barfs on `Debug.log` here
-- (Debug.log "build: " (build 1 2))
--
-- elm-format-0.17 Build.elm --output Foo.elm
-- Processing file Build.elm
-- ERRORS
-- -- SYNTAX PROBLEM ---------------------------------------------------- Build.elm
--
-- I ran into something unexpected when parsing your code!
--
-- 27│ (Debug.log "build: " (build 1 2))
-- ^
-- I am looking for one of the following things:
--
-- end of input
-- whitespace
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment