繁体   English   中英

Haskell中可能的无点模式匹配?

[英]Point-free pattern matching possible in Haskell?

鉴于

data TwoInts = TwoInts Int Int 

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

是否可以在不必命名ab情况下编写add'em 就像是:

 add'em TwoInts = (+) -- (Note: Fails to type check)

通过对元组的类比,

data TwoInts = TwoInts { fst', snd' :: Int }

我们可以定义一个操作来将两个参数的函数提升到TwoInt

uncurry' f p =  f (fst' p) (snd' p)

给我们一个很好的符号:

add'em = uncurry' (+)

一般来说,我会说不,这是不可能的。 但是,如果你试图解决在整个地方展开和包装的实际问题(特别是对于newtypes),我经常定义一个mapf f (Type val) = Type (f val)函数,类似于fmap,然后不要导出它。 只需传递更多函数,就可以对n-ary数据类型执行相同的操作。 如果实现不应该是秘密的,您也可以将其导出(作为一元的fmap)。 我建议使用这种映射函数或复杂类型的视图,因为模式匹配会将您绑定到实现。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM