Functional programming Elm:从字符串列表中提取记录值

Functional programming Elm:从字符串列表中提取记录值,functional-programming,elm,Functional Programming,Elm,我尝试创建一个函数,该函数接受一条记录和一个属性名列表,并以字符串列表的形式返回值: Model -> (List String) -> (List String) 以后的目标是能够将记录动态呈现到HTML表中: Model -> (List String) -> (Html Cmd) 我成功地实现了这一点: import Html exposing (text) type Field = FieldInt Int | FieldString String

我尝试创建一个函数,该函数接受一条记录和一个属性名列表,并以字符串列表的形式返回值:

Model -> (List String) -> (List String)
以后的目标是能够将记录动态呈现到HTML表中:

Model -> (List String) -> (Html Cmd)
我成功地实现了这一点:

import Html exposing (text)

type Field
  = FieldInt Int
  | FieldString String

type alias Model = 
  { name: Field
  , age: Field
  }

user1 = Model (FieldString "foo") (FieldInt 3)

field2text: Field -> String
field2text field =
  case field of
    FieldInt value ->
      toString value
    FieldString value ->
      value

updateModel: (List (a -> Field)) -> (List String)
model2values fns model =
  List.map (\fn -> field2text <| fn model) fns

main =
  text <| toString (model2values [.name, .age] user1)

没有好办法,所以你只能:

toFieldGetter : String -> (a -> Field)
toFieldGetter : name = 
    case name of 
        "name" -> .name
        ...

model2values_ = model2values << List.map toFieldGetter

main =
  text <| toString (model2values_ ["name", "age"] user1)
toFieldGetter:String->(a->Field)
toFieldGetter:名称=
案件名称
“名称”->。名称
...
model2values_u2;=model2values
toFieldGetter : String -> (a -> Field)
toFieldGetter : name = 
    case name of 
        "name" -> .name
        ...

model2values_ = model2values << List.map toFieldGetter

main =
  text <| toString (model2values_ ["name", "age"] user1)