给定:

data TwoInts = TwoInts Int Int

add'em :: TwoInts -> Int
add'em (TwoInts a b) = a+b

是否可以在不命名add'ema的情况下编写b。就像是:
 add'em TwoInts = (+) -- (Note: Fails to type check)

最佳答案

一般来说,我会说不,这是不可能的。但是,如果您要解决实际的问题,即在整个位置进行拆包和包装(尤其是在newtypes上很常见),那么我通常会定义一个类似于fmap的mapf f (Type val) = Type (f val)函数,然后不导出它。您可以通过传递更多函数来对n元数据类型执行相同的操作。如果该实现不应该是 secret 的,那么您也可以将其导出(对于fary,则为fmap)。我建议使用这种类型的 map 函数或复杂类型的 View ,因为模式匹配将使您与实现联系在一起。

基本类型已经定义了这样的功能,例如maybeeither

关于haskell - Haskell中可以进行无点模式匹配吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5916180/

10-13 04:16