I'm not certain as I've not looked in the compiler, but based on how it 
works it seems to me that Elm's partial records in functions is a form of 
row-typing on traditional Hindley-Milner types.


On Friday, February 10, 2017 at 5:30:22 AM UTC-7, Rupert Smith wrote:
>
> For my undergraduate project (20+ years ago), I implemented a language 
> called Ob<: (or ObSub) from "A Theory of Objects" by Abadi and Cardelli. 
> This language is related to the functional language F<: (functional 
> calculus with sub-typing), which is somewhat related to F#. My project 
> supervisor worked for Microsoft Research and was involved in the .Net 
> project.
>
> One thing about Ob<: is that due to the sub-typing relation in the 
> language, typing became semi-decideable. Given a type and a program, you 
> can decide if the program fits the type (checking), but given a program you 
> cannot work out what its type is (inference). This meant that you had to 
> give the type in full of every program you wrote - sometimes the type was 
> longer than the program!
>
> As I understand it, Elm uses a different extensible record type to that of 
> OO languages with full-blown sub-typing? Does anyone have a reference to 
> the paper this is based on? 
>
> And am I right in thinking that this version of extensible records is 
> fully decideable and all types can always be infered?
>
> I am just trying to understand what exactle extensible records are and 
> what their limitations are. As far as I can tell, sub-typing cannot really 
> be represented in Elm - the concrete type of something must be known fully 
> in advance? Makes sense I suppose, there is no dynamic loading and linking 
> of code at runtime, and allowing it would need runtime type checks (uuughh).
>
> ========
>
> I added this example here to one of the compiler issues:
>
> https://github.com/elm-lang/elm-compiler/issues/1504
>
> type alias Record1 =
>     { field : String, otherField : String }
>
>
> type alias Record2 =
>     { otherField : String }
>
>
> type Grouping
>     = R1 Record1
>     | R2 Record2
>
>
> extract : (a -> String) -> Grouping -> String
> extract selector grouping =
>     case grouping of
>         R1 record ->
>             selector record
>
>         R2 record ->
>             selector record
>
> What I am trying to do here is to write a general function that will let 
> me select a field from a record type out of a choice of several different 
> record types. I also tried recently to reformulate this using extensible 
> records but just ended up in a mess.
>
> This came about because I was trying to map a data model which on the 
> server side in Java does use sub-typing. I suspect that what I need in 
> order to be able to extract an arbitrary field at runtime from a set of 
> fields is to use a Dict...
>

-- 
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.

Reply via email to