Так что если вы ищете для решения нулевой зависимости, которая не требует Json.Decode.Pipeline
.
import Json.Decode as Decode exposing (Decoder)
modelDecoder : Decoder Model
modelDecoder =
Decode.map3 Model
(Decode.field "id" Decode.int)
(Decode.field "name" Decode.string)
(Decode.maybe <| Decode.field "desc" Decode.string)
Если вы хотите сделать это с помощью Model
конструктор как аппликативном функтора (потому что вам нужно больше 8 пунктов).
import Json.Decode as Decode
import Json.Decode.Extra as Decode exposing ((|:))
modelDecoder : Decoder Model
modelDecoder =
Decode.succeed Model
|: Decode.field "id" Decode.int
|: Decode.field "name" Decode.string
|: Decode.maybe (Decode.field "desc" Decode.string)
Оба из которых может быть использован с List
с с Decode.list modelDecoder
. Я желаю, чтобы аппликативные функции находились в стандартной библиотеке, но для получения этих функций вам нужно будет использовать все библиотеки * -extra. Знание того, как работают аппликативные функторы, поможет вам понять, что происходит дальше, поэтому я предлагаю прочитать о них. Решение Decode Pipeline абстрагирует эту простую концепцию, но когда вы столкнулись с необходимостью для Result.andMap
или любого другого из andMap
, потому что для вашего модуля или DSL нет mapN
, вы узнаете, как добраться до вашего решения.
После того, как я отправил свой вопрос, Гуглинг привел меня к записи Брайана Хикса на декодерах JSON. Я был рад увидеть ваш ответ, когда вернусь. Рад найти хороший источник, это полезно и для других. –
В вашей последней строке, я думаю, вы хотите '(Json.map Just string)' в отличие от 'Json.map Just int ''. –
Спасибо, я обновил его с помощью 'string' и примера Ellie. Надеюсь, поможет! – bdukes