All type variables need to be mentioned on the left side of the type alias definition. But that doesn't mean you need to bind them. This compiles fine:
type alias Convertor b a = { convert : b -> a } c: Convertor b String c = {convert = convertString} In other words, the unbound type variable needs to be mentioned in the type signature, even if you are wrapping more abstractions over it. On Fri, Jan 20, 2017 at 3:06 AM, Martin Cerny <cern...@gmail.com> wrote: > Hi all, > I was trying to do some Elm Voodoo and I stumbled upon a funny thing. It > is probably deeply wrong, but I want to understand why it is wrong :-) > > What I was trying to do was to define a type like this: > > type alias Convertor a = > { convert : b -> a > } > > > Here I get "Type alias `Convertor` must declare its use of type variable b" > Now, I understand, why you cannot have > > type alias X a = { field1: a, field2: b } > > But with the source type of functions, things are IMHO different than with > values. You cannot write values of unbound types and you could not decide > whether two instances of X are really the same type. > But you can easily write functions that have unbound source types - like > this one: > > convertString: a -> String > convertString x = > (toString x) ++ "_Foo" > > > And since all of functions with this signature really have the same type > at JavaScript level, two instances of 'Convertor a' would always had the > same type. > > Now if I had > c: Convertor String > c = {convert = convertString} > the whole thing seems type-safe... > > So my question is: > Is this syntax forbidden, because it is an obscure feature that is not > worth supporting, or would this syntax really allow for some type unsafe > code? > > Thanks! > > Martin > > > -- > 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 elm-discuss+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- 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 elm-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.