type Foo = {
x :: Int,
y :: Int
}
type Bar = {
x :: Int
}
foo :: Foo
foo = {x:1,y:2}
bar :: Bar
bar = foo
не могли соответствовать типЕсть ли способ получить subrecord без unsafeCoerce?
()
с типом
(у :: Int )
Почему это не возможно?
Я не могу использовать
type Bar a = {
x :: Int | a
}
И не хочу, чтобы воссоздать запись
bar = {x : foo.x}
ли unsafeCoerce
единственный вариант?
В чем может быть проблема с использованием unsafeCoerce
?
Есть ли причина, по которой невозможно использовать 'bar = foo :: Bar', или это просто не реализовано? – ais
Короткий ответ: мы не хотим, чтобы система типов работала именно так. Есть некоторые философские причины, почему, но вот очень конкретный вопрос: если бы вы могли это сделать, тогда вы также могли бы легко исчезнуть из типов типов. –
Но вы уже можете сделать это, создав новую запись '{x: foo.x}'. Поэтому 'a :: B' можно преобразовать в' {x: a.x, y: b.y, ...} '. – ais