Imagine a list of `Convertor a` like this :
convertors : List (Convertor x)
convertors =
convertor1 :: convertor2 :: []
mapConvertors = List.map (\c -> c.convert "foo") convertors
You can see here, that you cannot map over `Convertor::convert` if you
don't know what to give to the function.
Is it clear ? I can be more thorough if you want.
On Friday, January 20, 2017 at 12:06:49 PM UTC+1, Martin Cerny 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 [email protected].
For more options, visit https://groups.google.com/d/optout.