1
`coerce`によるタイプロールと紛らわしい動作
タイプがId aあり、誤って強制的に変換しないようにしようとしId DoubleていId Intます。 タイプの役割を正しく理解していれば、以下はコンパイルできません。 {-# LANGUAGE RoleAnnotations #-} import Data.Coerce (coerce) type role Id nominal newtype Id a = Id String badKey :: Id Int badKey = coerce (Id "I point to a Double" :: Id Double) 残念ながら、それはします: Prelude> :load Id.hs [1 of 1] Compiling Main ( Id.hs, interpreted …