给定:
data TwoInts = TwoInts Int Int
add'em :: TwoInts -> Int
add'em (TwoInts a b) = a+b
是否可以在不命名
add'em
和a
的情况下编写b
。就像是: add'em TwoInts = (+) -- (Note: Fails to type check)
最佳答案
一般来说,我会说不,这是不可能的。但是,如果您要解决实际的问题,即在整个位置进行拆包和包装(尤其是在newtypes上很常见),那么我通常会定义一个类似于fmap的mapf f (Type val) = Type (f val)
函数,然后不导出它。您可以通过传递更多函数来对n元数据类型执行相同的操作。如果该实现不应该是 secret 的,那么您也可以将其导出(对于fary,则为fmap)。我建议使用这种类型的 map 函数或复杂类型的 View ,因为模式匹配将使您与实现联系在一起。
基本类型已经定义了这样的功能,例如maybe
和either
。
关于haskell - Haskell中可以进行无点模式匹配吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5916180/