type Foo = {
x :: Int,
y :: Int
}
type Bar = {
x :: Int
}
foo :: Foo
foo = {x:1,y:2}
bar :: Bar
bar = foo
はタイプunsafeCoerceなしでサブレコードを取得する方法はありますか?
を(一致しませんでした)
タイプ
(Y ::の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