Woj*_*ilo 4 haskell tuples pattern-matching
是否可以在Haskell中模式匹配元组,但不知道元组的维数?我想创建一个与任何元组相对应的函数,第一个元素是A:
data A = A Int
test args@(A a,..) = a
Run Code Online (Sandbox Code Playgroud)
我知道有Data.Tuple.Select模块,我可以像这样使用它:
test args = case sel1 args of
A a -> a
...
Run Code Online (Sandbox Code Playgroud)
但这是否是这样做的唯一方法,或者Haskell有一些默认机制来匹配任何维度元组?
您可以使用ViewPatterns扩展来模式匹配应用于参数的函数的结果:
{-# LANGUAGE ViewPatterns #-}
data A = A Int
test (fst -> A a) = a
Run Code Online (Sandbox Code Playgroud)
您可以使用镜头投射任意字段:
{-# LANGUAGE ViewPatterns #-}
import Control.Lens
import Control.Arrow ((&&&))
data A = A Int
test (fields _1 _3 -> (A x, A y)) = x + y
fields f1 f2 = (^.f1) &&& (^.f2)
-- > test (A 1, A 2, A 3)
-- > 4
Run Code Online (Sandbox Code Playgroud)