左側が例外/エラーを表し、2 番目の側が戻り値を格納する、Either のインスタンスを返す関数があります。
Each インスタンスが Error ブランチにインスタンス化されたままになっている場合は、すぐに戻りたいと思います。インスタンスが Right インスタンス化されている場合は、それを Maybe でラップして続行します (Maybe として関数に入り、Nothing の場合にのみ検索されます)。
これは私のテストケースごとに機能しています:
- isNothing が渡されています :: ルックアップがエラーです
- isNothing が渡されています :: ルックアップは成功しました
- isJust(22) が渡されます (ルックアップは実行されません)
コードは問題ないように感じますが、Folktale data.either ライブラリのより細かい点が欠けているとは思いません。
// from data.monad
const someValue = Maybe.Nothing()
// ...snip...
if (someValue.isNothing) {
// from data.either :: Either.Left | Either.Right
const possiblySomeValue = yield lookupSomeValue()
if(possiblySomeValue.isLeft) {
return possiblySomeValue
} else {
someValue = Maybe.Just(possiblySomeValue.get())
}
}
私は ES6 (Node 4.1) と Folktale: data.either および data.maybe を組み合わせています。私の目標は、このスタイルで適切に書く方法についての理解を本当に高めることです
問題を更新すると、もう少し複雑になります。独立したルックアップを連続して使用できます。これは、連鎖する可能性があると感じています。
// from data.monad
const someValue = Maybe.Nothing()
// ...snip...
if (someValue.isNothing) {
// from data.either :: Either.Left | Either.Right
const possiblySomeValue = yield lookupSomeValue()
if(possiblySomeValue.isLeft) {
return possiblySomeValue
} else {
someValue = Maybe.Just(possiblySomeValue.get())
}
}
// from data.monad
const someValue2 = Maybe.Nothing()
// ...snip...
if (someValue2.isNothing) {
// from data.either :: Either.Left | Either.Right
const possiblySomeValue2 = yield lookupSomeValue2()
if(possiblySomeValue2.isLeft) {
return possiblySomeValue2
} else {
someValue2 = Maybe.Just(possiblySomeValue2.get())
}
}
コードを非常に醜くする連続した発生...