El problema ahora es que tengo una base de código en crecimiento, tan pronto como cambio una cosa, mi código se rompe por todas partes y me consume el rastreo de todos los problemas.
Esto es en realidad anuncian como una característica en Yesod (un framework web Haskell). Supongamos que yo he especificado la siguiente especificación de enrutamiento:
/blog/#String BlogR GET
y decido que quiero cambiarlo a
/blog/#Date/#String BlogR GET
Tan pronto como hago este cambio en las rutas, el compilador dime todas partes que He roto mi código Me veré obligado a actualizar la función getBlogR
- cambiando su tipo de entrada para que también acepte un Date
. También me veré obligado a actualizar cualquier lugar donde use URL seguras de tipo en mis plantillas, que se vería como @{BlogR (slug p)}
->@{BlogR (date p) (slug p)}
.
Ésta se considera una buena cosa , porque el tipo de corrector es ayudar a encontrar problemas introducidos por los cambios realizados.
Ahora, con respecto a ghci.
ghci> let shew = show
ghci> :t shew
shew ::() -> String
ghci> :t show
show :: Show a => a -> String
A veces es cierto que ghci elige los valores predeterminados molestos. Esto, sin embargo, puede ser aliviado.
ghci> :set -XNoMonomorphismRestriction
ghci> let shew = show
ghci> :t shew
shew :: Show a => a -> String
Durante el uso de ghci a descubrir el tipo de función es ideal para principiantes, yo no recomendaría confiando en ghci. Aprenda qué significan las firmas de tipo, y cómo descubrirlas usted mismo. De hecho, comience a escribir una función escribiendo primero la firma de tipo que pretende que tenga. Solo se necesita una pequeña inversión de tiempo para aprender esta habilidad, y es una gran ayuda programar cuando puede usar el sistema de tipos de Haskell para su ventaja.
Eso parece un poco extraño. ¿Qué estás haciendo exactamente que rompe todo el código? ¿Estás cambiando tus tipos continuamente? Normalmente uno se fijaría en un diseño para sus tipos después de un tiempo (o incluso al principio), y la mayor parte del trabajo estaría en el resto del código (lo que en un Haskell correctamente escrito debería ser increíblemente independiente). Tenga en cuenta también que si agrega constructores a su tipo, no es sorprendente que el código que maneja ese tipo se rompe y el compilador es útil para señalar problemas potenciales, aunque los genéricos pueden ayudar si no se debe romper el código. .. – Jedai
Quizás necesite hacer algunos sinónimos tipo o definiciones de tipo para que sus cambios puedan ser localizados en un solo lugar. – augustss
¿Puedes dar un ejemplo de lo que intentas lograr y cómo esperas que se comporte? – ondra