Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
oneOf : List (Decoder a) -> Decoder a
習慣寫 conditional 的程式語言 沒想到這邊會是這樣處理
逐一逐一嘗試
success 就回傳
error 就嘗試下一個
這是 FP 的常見 pattern 嗎?
https://github.com/elm/json/blob/1.1.3/src/Elm/Kernel/Json.js
case __1_ONE_OF:
var errors = __List_Nil;
for (var temp = decoder.__decoders; temp.b; temp = temp.b) // WHILE_CONS
{
var result = _Json_runHelp(temp.a, value);
if (__Result_isOk(result))
{
return result;
}
errors = __List_Cons(result.a, errors);
}
return __Result_Err(__Json_OneOf(__List_reverse(errors)));
原因大概是這樣:
這不是 imperative 那種可以在過程中 mutate data 的寫法
不可能一行一行 imperative 下來,中間根據 if/else 去 decide some attribute value
要高度 declarative 只能拿多份 具有 success/error 結果的 function 去套用
然後 oneOf 去找出結果,然後 oneOf 這名字也很 declarative