elm / compiler

Compiler for Elm, a functional language for reliable webapps.
https://elm-lang.org/
BSD 3-Clause "New" or "Revised" License
7.56k stars 662 forks source link

Extracting function-argument as type-alias is a API-breaking change #1978

Open ghost opened 5 years ago

ghost commented 5 years ago

Quick Summary: elm diff outputs that my function signature is a breaking the API of my package if I redefine its arguments as a type alias. I think this is related to #1895.

SSCCE

1.0 API

module packageApi exposing (foo)

foo : { bar : String } -> ()
foo = always ()

2.0 API, but could be 1.1.0?

module packageApi exposing (Bar, foo)

type alias Bar = 
    { bar : String
    }

foo : Bar -> ()
foo = always ()

But this doesn't seem breaking, and could probably be 1.1.0 with some changes to elm diff?

Additional Details

I wouldn't mind taking a stab at implementing this into elm diff, but I'm not fluent in Haskell and dunno if this is trivial or complicated. Let me know if I should give it a try! :sunny:

I haven't tested this with arguments that isn't records, but I assume this would be the same.

dullbananas commented 4 years ago

That actually is breaking since it removes the record constructor function, and you can't use Bar in your own type annotations

harrysarson commented 4 years ago

Only the opposite change would actually be breaking; this issue talks about adding the Bar record constructor, not removing it.

dullbananas commented 4 years ago

i swear i saw it the other way around