いくつかのパターンで計算を行う関数があるとしましょう。パターンマッチングの形で実装されています。
これらのパターンのほとんどは (それぞれに異なる他のことと共に)、let
式で中間変数を使用するパラメーターの処理を行います。しかし、多くのパターンで同じものを使用するのは本当に冗長だと思います。いくつかのパターンに対してlet
を定義する方法があるのだろうか?let
これが私の重複した例です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
ことがわかります。これは因数分解できます。ヘルパー関数を使用することで簡単に実現できますが、私が求めていることはヘルパー関数なしで可能かどうか疑問に思っていました. 初心者向けにシンプルにしてください。私の例が十分に明確であることを願っています。