尤川豪   ·  1年前
445 貼文  ·  275 留言

Elm - Json.Decode.oneOf 小研究

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

  分享   共 570 次點閱
共有 0 則留言
還沒有人留言。歡迎分享您的觀點、或是疑問。
您的留言
尤川豪
445 貼文  ·  275 留言

Devs.tw 是讓工程師寫筆記、網誌的平台。隨手紀錄、寫作,方便日後搜尋!

歡迎您一起加入寫作與分享的行列!

查看所有文章