我一直在elm中使用可扩展记录(0.18).我的模型包含以下类型: type alias Cat c = { c | color : String , age : Int , name : String , breed : String }type alias SimpleCat = Cat {}type alias FeralCat = Cat { feral : Bool , sp
type alias Cat c = { c | color : String , age : Int , name : String , breed : String } type alias SimpleCat = Cat {} type alias FeralCat = Cat { feral : Bool , spayed : Bool }
现在我希望能够将这些类型传递给解码器.我通常使用elm-decode-pipeline库“NoRedInk / elm-decode-pipeline”:“3.0.0< = v< 4.0.0”. 我设置了这种类型:
catDecoder : Decode.Decoder SimpleCat catDecoder = Pipeline.decode SimpleCat |> Pipeline.required "color" Decode.string |> Pipeline.required "age" Decode.int |> Pipeline.required "name" Decode.string |> Pipeline.required "breed" Decode.string
但我得到这个错误:
-- NAMING ERROR --------------------------------------------- ./src/Decoders.elm Cannot find variable `SimpleCat` 141| Pipeline.decode SimpleCat
我的非可扩展类型不会发生这种情况.有没有办法在解码器中使用这些类型? (elm-decode-pipeline首选,但我想知道是否有另一种方式)
遗憾的是,可扩展记录目前(从Elm 0.18开始)不允许使用别名作为构造函数创建它们.您可以改为编写自己的构造函数:simpleCatConstructor : String -> Int -> String -> String -> SimpleCat simpleCatConstructor color age name breed = { color = color, age = age, name = name, breed = breed }
然后你可以在解码中替换它:
catDecoder = Pipeline.decode simpleCatConstructor |> Pipeline.required "color" Decode.string ...