如何让模块消费者在Elm中定义类型

时间:2017-03-06 16:11:33

标签: types elm

我在我的Elm项目中创建了一个表模块。

每列都有一个getter函数,用于定义如何从为行建模的记录中检索数据。

所以一行可能看起来像:

{ name = "bananas"
, price = 5
}

列可能如下所示:

[ { title = "Item Name"
  , get = .name
  }
, { title = "Price in pennies"
  , get = .price >> (*) 100 >> toString
  }
]

这意味着列get函数的类型注释是: Row -> String

我遇到的问题是我想让这个表模块成为其他项目的可重用组件,这些项目有自己的" Row"类型。如何允许模块的使用者指定行类型别名而不删除所有类型注释?

我对榆树很新,很抱歉,如果我的问题中的措辞不对。

1 个答案:

答案 0 :(得分:4)

您可以引入类型变量Row,而不是使用您自己的类型a,但任何小写名称都可以使用,例如elm-sortable-table data })

然后你可以创建这样的东西:

type alias Column a =
    { get : a -> String
    , title : String
    }

type alias Columns a =
    List (Column a)

viewTable : Columns a -> List a -> Html msg