2
在Haskell或任何其他支持模式匹配的编程语言中,我们可以实现以下功能:我们可以解构任意的数据构造函数吗?
给定一个数据构造函数,例如, Left :: a -> Either a b
我可以提取它与
let f (Left x) = [x]
说法是有什么办法可以实现对任何数据构造同样的事情,像运营商(*
)取消Left x
到Apply (λa.Left a) [x]
或BinTree x y
到Apply (λa,b.BinTree a b) [x,y]
,所以我们可以做
let extract x = case *x of Apply _ xs -> xs
那些不是_type_构造函数,它们是_value_构造函数,或者只是“构造函数”。类型构造函数是'Maybe,IO,IO,State,...',它们是'* - > * - > ....-> *'的东西。 – chi
我认为这是一个答案,@ kosmikus。而且chi有一点:'Left'是一个值构造函数,而不是一个类型。 – Zeta
@kosmikus是不是不推荐使用syb? – arrowd