Например,
case undefined of
D d -> "hello"
выдаст ошибку для data
типов (строгих или не строгих), но оценит "hello"
для новых типов.
Это потому, чтово время выполнения применение конструктора newtype
или сопоставление с ним не соответствует ни одной операции.Даже не навязывая значение, которое мы case
определяем.
В отличие от этого, сопоставление с образцом в конструкторе data
всегда вызывает значение, на которое мы case
.
Я думаю, что это единственноеразница во времени выполнения между строгими data
и newtype
.Существуют некоторые статические различия, такие как некоторые расширения GHC, которые влияют только на newtype
, Coercible
и т. Д., Но во время выполнения эти два типа изоморфны (но сопоставление с образцом работает по-разному, как показано выше).