byr*_*sos 5 haskell haskell-platform
好吧,也许标题有点令人困惑,但我想要做的是有这样的功能:f (a:b:c:d:is) = ...
但能够参考a:b:c:d
而不再写它.事实证明,我不能做类似的事情e@(a:b:c:d):is
并获得预期的结果.有任何想法吗?
我能想到的最好的就是使用视图模式,如下所示:
{-# LANGUAGE ViewPatterns #-}
f (splitAt 4 -> (as@[a,b,c,d], is)) = is ++ [d,c,b,a] ++ as
Run Code Online (Sandbox Code Playgroud)
你不能这样做,一个原因是这a:b:c:d
不是一个很好的表达方式.通过定义中的绑定f
,a, b, c, d
所有类型都具有相同的类型t
,但是列表构造函数的类型是
(:) :: t -> [t] -> [t]
Run Code Online (Sandbox Code Playgroud)
你可以通过绑定来实现你想要的东西let foo = take 4 inputList
.诚然笨重,但我无法想到任何更好的东西.