Home > Software engineering >  Access columns of a list by entering them as arguments of a function in elm
Access columns of a list by entering them as arguments of a function in elm

Time:01-16

type alias Footballer =
   { name : String, age : Float, overall : Float, potential : Float }


type alias Point =
    { pointName : String, x : Float, y : Float }

pointName : Footballer -> Point
pointName x a b c=
    Point x.a  x.b x.c

I am trying to create points for a scatterplot and want to be able to provide the function with a Player and 3 columns I want to be able to provide variably.

I am struggling with elm, as I am trying to access fields of my List of Football players variably but I can not seem to find a way to do this without rewriting the function pointName for each Variation of Points I want to create.

CodePudding user response:

Elm automatically generates polymorphic accessor functions for all the fields of the records used. (e.g. .age : { a | age : b } -> b) You can use these functions as arguments to pointName and apply them in the body of the function to extract the targeted field.

pointName :
    r
    -> (r -> String)
    -> (r -> Float)
    -> (r -> Float)
    -> Point
pointName r a b c =
    Point (a r) (b r) (c r)


player =
    { name = "Messi", age = 34, overall = 99, potential = 100 }


foo =
    pointName player .name .age .potential

bar =
    pointName player (.age >> String.fromFloat) .overall .potential
  •  Tags:  
  • elm
  • Related