mundo - imprimir en haskell
¿Cuáles son las abstracciones más importantes en Haskell? Mónadas? Aplicativos? (3)
Quiero saber qué bibliotecas, funciones y conceptos debo conocer y cómo usar. La mónada y las funciones allí son el ejemplo típico, pero hay otras buenas primitivas para usar en la codificación, como Flechas, Aplicativo, ... ¿Quiénes son?
por cierto, quiero estar al día en el mundo de Haskell, aprendiendo los nuevos conceptos, ¿cómo se hace esto?
(El título original era: "Primitivas de biblioteca para la codificación", pero esto fue cambiado)
Bibliotecas básicas para conocer:
- base (módulo de preludio, etc)
- Monad Transformer Library, mtl o MonadLib .
- containers
Bibliotecas centradas en datos comunes:
Conceptos empaquetados que debes conocer:
- Mónadas, transformadores de mónada (ver base, mtl)
- Aplicativo (ver base)
- Flechas (ver base)
- Software de memoria transaccional ( stm )
- Excepciones extensibles ( en base desde ~ GHC 6.8)
- Programación dinámica en Haskell (Ver Data.Typeable en base)
- Chispas (consejos de paralelismo ligero a través de parallel )
- Concurrencia (ver Control.Concurrente en base)
- Memoización ( monad-memo , MemoTrie )
Conceptos semi-avanzados:
- Programación reactiva funcional ( reactive-banana , netwire )
- Iteratees ( enumerator )
- Programación genérica ( syb , uniplate , etc)
Pruebas, benchmarking, e infraestructura:
- criterion (herramienta de benchmarking)
- quickcheck , lazysmallcheck (pruebas de propiedad)
- cabal y hackage
Herramientas externas, ayudantes de GHC, GHC.
- threadscope
- alex (lexer)
- happy (un generador de parser)
- haddock (sistema de documentación)
- Cobertura del programa Haskell ( HPC )
- Manual de GHC , que incluye información sobre cosas como
- Diferentes back-ends
- Perfilado
- Depuración
- Mejoramiento
- Extensiones de lenguaje
Conocimiento centrado en el tipo
- GADTs
- Tipos de Rango-N
- Existenciales
- Dependencias funcionales y familias tipo
- Esta lista puede seguir y seguir, pero sabrá dónde buscar si conoce lo anterior.
Cómo mantenerse actualizado sobre Haskell sin hacer una pregunta de desbordamiento de pila:
- Lea los trabajos aceptados por ICFP y POPL
- Lea los documentos rechazados por ICFP y POPL (si puede encontrarlos)
- Conéctate en las redes sociales, Haskellers parece grande en
- Twitter (comienza siguiendo a quien siga a Galois o cualquier Haskeller al azar que conozcas)
- Desbordamiento de pila (envíeme un mensaje si necesita un enlace)
- Leer blogs (enlazados desde reddit o planet.haskell.org )
- Siga las conversaciones en la lista de correo de haskell-cafe o IRC .
- Asiste a las charlas de tecnología semanal de Galois.
De hecho, hace un tiempo dibujé una lista / agrupación de cosas relacionadas con Haskell por su importancia práctica; se parece a esto:
Fundamentos de Haskell (necesarios para cualquier cosa)
- Funciones
- Aplicación parcial, al curry.
- Recursion
- Funciones de orden superior
- Tipos de datos algebraicos
- La coincidencia de patrones
- Clases de tipo
- Clases
- Functores
- la mónada IO
Necesidades prácticas (es probable que necesites conocerlas para el trabajo serio, incluso si por casualidad no las usas todas)
- Mónadas
- Transformadores de mónada
- La fff
- Pobreza / Estricto, BangPatterns y el resto
- GADTs
- TipoFamilias
- Dependencias funcionales
No necesariamente necesario, pero probablemente útil
- Aplicativo
- Polimorfismo de rango superior
- Las superposiciones
- Lentes y sistemas de grabación alternativos (fcLabels y el resto).
- Iteratees
- Haskell concurrente (forkIO, MVars, ...)
- Software de memoria transaccional
- PlantillaHaskell
- REGLAS
Extracurricular (potencialmente fascinante pero totalmente innecesario)
- Flechas
- Programación reactiva funcional
- Comandos, categorías, morfismos y otras tonterías abstractas generales
La mejor manera de comenzar su experiencia Haskell es instalar la Plataforma Haskell , que tiene muchas de las bibliotecas que consideramos importantes.
Si observa qué abstracciones se incluyen en el sistema base, verá algunas cosas que vale la pena aprender:
Y no te olvides de las poderosas herramientas: