Возможно ли следующее в Elm?
func : a -> {a | id : Int}
func x = { x | id = 123 }
Не удается скомпилировать, потому что a
слишком слишком полиморфный;он думает, что это может быть что угодно, включая незаписываемые типы.Как мне сказать компилятору, что a
является типом записи, но для которого мы не знаем НИКАКОГО поля?(Честно говоря, мне было бы достаточно, хотя {a | id : Int}
было достаточно.)
Я пытался ...
type alias Record a = {a}
func : Record a -> { a | id : Int }
func : {a} -> {a | id : Int}
func x = { x | id = 123 }
И то, и другое не работает с синтаксическими ошибками.Можно ли сказать «этот тип - запись, но я ничего не знаю» Элму?
Чтобы ответить на ответ ниже:
Если бы это была запись без каких-либо определенных полей, вы бы не смогли сделать с ней что-либо похожее на запись, поэтому не представляется полезным иметь возможность выразить это.
Я пытаюсь сделать что-то похожее на запись с записью неизвестных полей в моем примере, поэтому говорить, что с ними ничего нельзя сделать, неверно.
Вы не можете динамически добавлять поля в запись.
Я не динамически добавляю поле к записи, я создаю новую запись, которая соответствует существующей, за исключением того, что у нее есть поле id
со значением 123
.
Это не совсем то, что делают записи, возможно потому, что было бы очень неловко, если бы уже было поле идентификатора.
Это похоже на реальный смысл ваших рассуждений, и я нене могу найти это очень убедительным.Почему это было бы неловко вообще?Кажется, что работать таким образом было бы самым очевидным способом работы?
Если это не то, что вы хотите, то, похоже, это случай проблемы XY
Просто в стороне, но каждый раз, когда я сталкиваюсь с неприятностями / слабостями в системе типов Элма, это почему-то моя вина, а не Элмс.