如何将两个函数重构为一个具有泛型参数的函数?
示例:
getVideo : Video -> Post
getVideo video =
let
(Video post) =
video
in
post
getPodcast : Podcast -> Post
getPodcast podcast =
let
(Podcast post) =
podcast
in
post
我想做类似的事情:
getPodcast : 'a -> Post
getPodcast 'a =
let
('a post) =
'a
in
post
附录
type Video
= Video Post
type Podcast
= Podcast Post
答案 0 :(得分:6)
你不能在Elm中拥有这样的开放式通用函数。这有两个选择:
您可以创建一个容器类型,其中包含每个有效类型的构造函数:
getPost
现在,您的case
函数包含一个getPost : PostContainer -> Post
getPost container =
case container of
VideoContainer (Video post) ->
post
PodcastContainer (Podcast post) ->
post
语句,该语句将返回相应的帖子。
Post
Post
值假设您的type alias Post =
{ name : String
, body : String
}
对象如下所示:
type PostType = Video | Podcast
你可以像这样创建一个帖子类型的枚举:
Post
您可以重新定义type alias Post =
{ name : String
, body : String
, postType : PostType
}
以包含类型:
type alias PostContents =
{ name : String
, body : String
}
type Post = Post PostType PostContents
或者,如果您选择将帖子主体与类型分开,您可以执行以下操作:
getPostContents
,您的getPostContents : Post -> PostContents
getPostContents _ contents =
contents
功能只是
value