Gran pregunta!
Hay varias diferencias clave.
Representación
- A
newtypegarantiza que sus datos tendrán exactamente la misma representación en tiempo de ejecución, que el tipo que ajusta.
- Mientras
datadeclara una nueva estructura de datos en tiempo de ejecución.
Entonces, el punto clave aquí es que newtypese garantiza que la construcción para el se borrará en el momento de la compilación.
Ejemplos:

newtype Book = Book (Int, Int)

Observe cómo tiene exactamente la misma representación que a (Int,Int), ya que el Bookconstructor se borra.
data Book = Book (Int, Int)

Tiene un Bookconstructor adicional no presente en el newtype.
data Book = Book {-# UNPACK #-}!Int {-# UNPACK #-}!Int

No hay punteros! Los dos Intcampos son campos de tamaño de palabra sin caja en el Bookconstructor.
Tipos de datos algebraicos
Debido a esta necesidad de borrar el constructor, a newtypesolo funciona cuando se ajusta un tipo de datos con un solo constructor . No hay noción de nuevos tipos "algebraicos". Es decir, no puede escribir un equivalente de nuevo tipo de, digamos,
data Maybe a = Nothing
| Just a
ya que tiene más de un constructor. Tampoco puedes escribir
newtype Book = Book Int Int
Rigor
El hecho de que el constructor se borre conduce a algunas diferencias muy sutiles en la rigidez entre datay newtype. En particular, dataintroduce un tipo que se "levanta", lo que significa, esencialmente, que tiene una forma adicional de evaluar a un valor inferior. Como no hay un constructor adicional en tiempo de ejecución con newtype, esta propiedad no se cumple.
Ese puntero extra en el Bookque (,)el constructor nos permite poner un valor inferior en.
Como resultado, newtypey datatienen propiedades de rigidez ligeramente diferentes, como se explica en el artículo wiki de Haskell .
Unboxing
No tiene sentido desempaquetar los componentes de a newtype, ya que no hay constructor. Si bien es perfectamente razonable escribir:
data T = T {-# UNPACK #-}!Int
produciendo un objeto de tiempo de ejecución con un Tconstructor y un Int#componente. Solo te desnudas Intcon newtype.
referencias :