Actions
Haskell¶
Изучение¶
Денис Москвин. Функциональное программирование на языке Haskell. stepik.org, видеокурс
О Haskell по-человечески
Learn You a Haskell for Great Good!
Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen
ru.haskell— сообщество русскоговорящих Haskell-разработчиков
Haskell Cheatsheet
haskell-trainings
Stack cookbook
The Haskell Phrasebook
Best practices¶
- Import modules properly
- deriving via
- Mirror Mirror: Reflection and Encoding Via
deriving ToJSON via Codec (Drop "user" & SnakeCase) User
- Mirror Mirror: Reflection and Encoding Via
- Alexis King: Parse, don’t validate
snippets¶
ghci debugging¶
:set -fbreak-on-error -fbreak-on-exception :trace machineMain :force _exception :hist :back
libs¶
- co-log
- named arguments
- refined — refinement types
type ProperFraction = Refined (And (Not (LessThan 0)) (Not (GreaterThan 1))) Double
- Data.Sequence — list with fast append on both sides
- bound: Making de Bruijn Succ Less — convenient combinators for working with "locally-nameless" terms. These can be useful when writing a type checker, evaluator, parser, or pretty printer for terms that contain binders like forall or lambda
- Workflow — computations resumable from storage (!)
- capability — effects based on DerivingVia
- compose-trans
- filepath-bytestring
- product-profunctors generalization of Applicative
- parameterized-utils
- mutable
- first-class-instances
- generic-data
- tree-diff
- deriving-aeson
- SMT:
- concat (z3cat || smt example) — Compiling to categories — compiler plugin for translating normal Haskell functions (on standard types) to SMT, etc.
- SBV: SMT Based Verification — translates Haskell functions on custom symbolic types
- holmes — library for constraint-solving with propagators and CDCL
- Testing:
- quickcheck
- leancheck enumerative property-based testing core
- extrapolate generalize counter-examples of properties
- speculate discover properties
- fitspec refine properties by mutation
- hedgehog property
- dejafu concurrency
- type-spec: type level testing eDSL
- should-not-typecheck
- Constraints:
- HKD:
- (Reversible) Parsing:
- https://yairchu.github.io/posts/codecs-as-prisms.html
- invertible-grammar by Eugene Smolanka, Sergey Vinokurov
- Syntax by Paweł Nowak (Pavel Christof?) @2014
- Unparse by Tillmann Rendel and Klaus Ostermann @2010 (paper)
- invertible-syntax by Tillmann Rendel @2010
- invertible-grammar by Eugene Smolanka and Sergey Vinokurov @2015-2019
- https://hackage.haskell.org/package/invertible-grammar @2015-2019
- Reversible S-expression parser @2015-2019
- Fresnel, Prism-based unified parsers and pretty printers by Fraser Tweedale @2016
- https://github.com/frasertweedale/hs-fresnel @2016-2017
- (related) new
optics
library, alternative tolens
@2019 - (related) generic-lens
- (related) Binary (ByteString-based) serialization by Lennart Kolmodin @2006-2019
- monadic
exts¶
- Existential Quantification
- RebindableSyntax — overloading built-in operators / do notation
- NullaryTypeClasses — global implementation of one thing
- DataKinds , TypeFamilies (+ GHC.TypeLits) — type-level annotations
other¶
- https://github.com/cohomolo-gy/haskell-resources
- ST Monad for imperative algorithms
- A Rosetta Stone for Haskell Abstractions Applicative, StateT, Lens
- Is it possible to place inequality constraints on haskell type variables?
- Practical uses of the Tardis monad?: 'build a packet ... where the fixed-length lengths and offsets of some variable length data are sent out before the actual data themselves'
- Comonadic builders
- GHC.Stack — can get code position for DSL
- GHC's Specializer: Much More Than You Wanted to Know
- Type Classes and Constraints
- Reified dictionaries GADT allows us to reify a constraint as an explicit dictionary
- Demystifying MonadBaseControl
- The Functor Combinatorpedia
- Cont:
- Tagless Final / Overloading:
- Introduction to Tagless Final
- Tagless Final Encoding in Haskell
- Typed final (aka, ``tagless-final'') style is a general method of embedding domain-specific languages (DSL)
- Overloading lambda
- Олег Нижников, Современное ФП с Tagless Final (синтаксис Scala)
- TypeFamilies:
- Functional Dependencies & Type Families
- Associated Types and Haskell
- Partially applied type families GHC Proposal
- On the arity of type families + Higher-order Type-level Programming in Haskell
- Type Class Instances for Type-Level Lambdas in Haskell
- Defunctionalization for Haskell Type Families
- Haskell with only one type family - fcf first-class families
- HKD:
- Haskell's kind system - a primer
- Advent of optics (не в смысле библиотеки optics)
- Four ways to partially apply constraint tuples
- Opaque constraint synonyms
- Tripping up type inference / Ambiguous Tags
- Building a Friendly and Safe EDSL with IxState and TypeLits config builder
- Haskell with UTF-8
- ooh Object Oriented Haskell :D
- Visual Arrow Syntax :D
Updated by Alexey Demakov over 3 years ago · 90 revisions