haskell language-extension

¿Qué extensiones de Haskell(GHC) deberían usar/evitar los usuarios?



language-extension (1)

He tenido la experiencia unas cuantas veces de que GHC me diga que use una extensión, solo para descubrir que cuando uso esa extensión he hecho el código mucho más complejo cuando un simple refactor me hubiera permitido seguir con Haskell 98 (ahora 2010 ) y tienen una solución más directa.

Por otro lado, también hay momentos en los que GADT o Rank2Types (rara vez RankNTypes) generan mucho menos trabajo y un código mucho más limpio.

¿Qué extensiones tienden a oscurecer la posibilidad de un mejor diseño y, en general, a mejorarlo? Si hay algunos que hacen ambas cosas, ¿qué debería buscar un usuario (asegúrese de que sea verdadero o no cierto de la solución que intentan) antes de decidir usar esa extensión?

(Ver también ¿Debo usar extensiones GHC Haskell o no? )


Una lista ad hoc de extensiones moralmente "buenas" y moralmente "malas": ¡este es un juicio estético!

El bueno

  • GADTs
  • Comprensión de listas paralelas
  • Protectores de patrones
  • Monad comprehensions
  • Secciones de tupla
  • Grabar comodines
  • Datos de datos vacíos
  • Tipos existenciales
  • Nuevo tipo generalizado derivado
  • MPTCs + FDs
  • Escriba familias
  • Cuantificación explícita
  • Polimorfismo de rango más alto
  • Tyvars de ámbito léxico
  • Patrones de Bang

El malo

  • Comprensión de SQL
  • Parámetros implícitos

Lo feo (pero necesario)

  • Plantilla Haskell
  • Tipos y tuplas sin caja
  • Instancias indecidibles, superpuestas e incoherentes: por lo general, significa que tiene un diseño incorrecto.

No es seguro

  • Notación de flecha
  • Ver patrones