я сериализовать следующий OCaml тип записи с помощью SexpОшибка десериализации Sexp из строки
module User =
struct
type id = int (*Uuid.t*) [@@deriving sexp]
module UserName =
struct
type id = string [@@deriving sexp]
type userId = {user_id: User.id} [@@deriving sexp]
type eff = Add of userId | GetId [@@deriving sexp]
let effToString x = Sexp.to_string (sexp_of_eff x)
let stringToEff x = (*let y = string_before x 24 in
eff_of_sexp (sexp_of_string (string_after y 1))*)
eff_of_sexp (Sexp.of_string x)
let id_to_str x = x
end
Пример Sexp приведенной выше записи выглядит как (Add((user_id 756438)))
я преобразовал Sexp в строку для встраивания его в JSON с помощью
let effToString x = (*Sexp.to_string_hum*) Sexp.to_string (sexp_of_eff x)
Я пытаюсь десериализации строки Sexp обратно к типу записи, используя Следующий код
let stringToEff x = eff_of_sexp (sexp_of_string x)
Я получаю ошибку
Fatal error: exception (Sexplib.Conv.Of_sexp_error (Failure "Microblog_app_runtime.UserName.eff_of_sexp: unexpected sum tag") "\"(Add((user_id 941952)))\"")
Я попытался удалить кавычки экранированы, но она по-прежнему дает мне ту же ошибку. Может кто-нибудь объяснить ошибку?
Пробовал это, я все еще получаю та же ошибка. – Kapil
попробуй больше :) Я тестировал его перед публикацией, и это работает, конечно. – ivg
Я думаю, что проблема связана с {user_id = "941952"}. Я отредактировал вопрос, чтобы дать больше контекста. user_id - целое поле. Можете ли вы попробовать сделать это? – Kapil