假设我有一个函数可以进行一些计算,有几种模式;以模式匹配的形式实现。
这些模式中的大多数都对参数进行处理(以及其他不同的东西),为此我在let
表达式中使用了中间变量。但是我发现在许多模式上都使用相同的模式确实是多余的let
,我想知道是否有一种方法可以let
为多个模式定义 a ?
这是我重复的示例let
:
data MyType a = Something a | Another Int [a]
myFunc (Something x) = -- return something, this isn't the point here
myFunc (Another 0 xs) =
let intermediary = some $ treatment xs
in doSthg intermediary 1
myFunc (Another 1 (x:xs)) =
let intermediary = some $ treatment xs
in doSthg1 intermediary 1 x
myFunc (Another 2 (x:x':xs)) =
let intermediary = some $ treatment xs
in doSthg2 intermediary 2 x x'
您可以看到,xs
当我将其用于 时,该参数始终存在intermediary
,这可以被分解。它可以通过使用辅助函数轻松实现,但我想知道如果没有辅助函数,我的要求是否可行。请尽量让初学者保持简单,我希望我的例子足够清楚。