Project

General

Profile

Haskell » History » Version 87

Grigoriy Volkov, 05/08/2020 11:11 PM

1 1 Grigoriy Volkov
h1. Haskell
2
3 10 Alexey Demakov
h2. Изучение
4
5
Денис Москвин. Функциональное программирование на языке Haskell. stepik.org, видеокурс
6
> "Часть 1.":https://stepik.org/course/75/syllabus
7
> "Часть 2.":https://stepik.org/course/693/syllabus
8
9
"О Haskell по-человечески":https://www.ohaskell.guide
10
"Learn You a Haskell for Great Good!":http://learnyouahaskell.com
11
"Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen":http://book.realworldhaskell.org
12
13
"ru.haskell— сообщество русскоговорящих Haskell-разработчиков":https://ruhaskell.org
14
> "Полезные ссылки":https://ruhaskell.org/links.html
15
16
"ru.haskell wiki":https://github.com/ruHaskell/ruhaskell/wiki
17
> "Настройка редакторов для поддержки Haskell":https://github.com/ruHaskell/ruhaskell/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B8-Haskell
18
19 4 Grigoriy Volkov
"Haskell Cheatsheet":http://bxt.github.io/Ludus/haskell-cheatsheet/
20 7 Grigoriy Volkov
"haskell-trainings":https://github.com/google/haskell-trainings/releases
21 14 Grigoriy Volkov
"Stack cookbook":https://guide.aelve.com/haskell/stack-cookbook-ai0adh03
22 42 Grigoriy Volkov
"The Haskell Phrasebook":https://typeclasses.com/phrasebook
23 4 Grigoriy Volkov
24 40 Alexey Demakov
h2. Best practices
25
26
* "Import modules properly":https://wiki.haskell.org/Import_modules_properly
27 51 Denis Buzdalov
* "deriving via":https://www.parsonsmatt.org/2018/04/10/transforming_transformers.html
28 74 Grigoriy Volkov
** "Mirror Mirror: Reflection and Encoding Via":https://www.parsonsmatt.org/2020/02/04/mirror_mirror.html <code>deriving ToJSON via Codec (Drop "user" & SnakeCase) User</code>
29 40 Alexey Demakov
30 5 Grigoriy Volkov
h2. snippets
31
32
* [[HaskellMaybeChecks]]
33
34 9 Grigoriy Volkov
h2. ghci debugging
35
36
<pre>
37
:set -fbreak-on-error -fbreak-on-exception
38
:trace machineMain
39
:force _exception
40
:hist
41
:back
42
</pre>
43
44 1 Grigoriy Volkov
h2. libs
45
46 16 Grigoriy Volkov
* "co-log":https://kowainik.github.io/posts/2018-09-25-co-log
47 12 Grigoriy Volkov
* "named":https://github.com/monadfix/named arguments
48 1 Grigoriy Volkov
* "refined":http://nikita-volkov.github.io/refined/ — refinement types <pre>type ProperFraction = Refined (And (Not (LessThan 0)) (Not (GreaterThan 1))) Double</pre>
49
* "Data.Sequence":http://hackage.haskell.org/package/containers-0.6.0.1/docs/Data-Sequence.html — list with fast append on both sides
50
* "bound: Making de Bruijn Succ Less":https://hackage.haskell.org/package/bound — 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
51 46 Grigoriy Volkov
* "Workflow":https://github.com/agocorona/Workflow — computations resumable from storage (!)
52 53 Grigoriy Volkov
* "capability":https://hackage.haskell.org/package/capability — effects based on DerivingVia
53 60 Grigoriy Volkov
* "compose-trans":http://hackage.haskell.org/package/compose-trans
54 65 Grigoriy Volkov
* "filepath-bytestring":https://hackage.haskell.org/package/filepath-bytestring
55 66 Grigoriy Volkov
* "product-profunctors":http://hackage.haskell.org/package/product-profunctors generalization of Applicative
56 67 Grigoriy Volkov
* "parameterized-utils":https://github.com/GaloisInc/parameterized-utils
57 69 Grigoriy Volkov
* "mutable":https://mutable.jle.im
58 70 Grigoriy Volkov
* "first-class-instances":https://gitlab.com/thematten/first-class-instances
59 74 Grigoriy Volkov
* "generic-data":https://github.com/Lysxia/generic-data
60 76 Grigoriy Volkov
* "tree-diff":https://hackage.haskell.org/package/tree-diff
61 84 Grigoriy Volkov
* "deriving-aeson":https://github.com/fumieval/deriving-aeson
62 44 Grigoriy Volkov
* SMT:
63
** "concat":https://github.com/conal/concat ("z3cat":https://github.com/jwiegley/z3cat/blob/master/test/Main.hs || "smt example":https://github.com/conal/concat/blob/master/examples/src/ConCat/SMT.hs) — *"Compiling to categories":http://conal.net/papers/compiling-to-categories/* — compiler plugin for translating normal Haskell functions (on standard types) to SMT, etc.
64
** "SBV: SMT Based Verification":https://leventerkok.github.io/sbv/ — translates Haskell functions on custom symbolic types
65 86 Grigoriy Volkov
** "holmes":https://github.com/i-am-tom/holmes — library for constraint-solving with propagators and CDCL
66 44 Grigoriy Volkov
* Testing:
67 72 Alexey Demakov
** "quickcheck":https://hackage.haskell.org/package/QuickCheck
68
*** "The official QuickCheck manual":http://www.cse.chalmers.se/~rjmh/QuickCheck/manual.html
69
*** "John Hughes - Building on developers' intuitions to create effective property-based tests | Lambda Days 19":https://www.youtube.com/watch?v=NcJOiQlzlXQ
70 77 Grigoriy Volkov
*** "quickcheck-state-machine":https://hackage.haskell.org/package/quickcheck-state-machine
71 84 Grigoriy Volkov
*** "Testing higher-order properties with QuickCheck":https://blog.poisson.chat/posts/2020-02-24-quickcheck-higherorder.html
72 44 Grigoriy Volkov
** "leancheck":https://hackage.haskell.org/package/leancheck enumerative property-based testing core
73
*** "extrapolate":https://hackage.haskell.org/package/extrapolate generalize counter-examples of properties
74
*** "speculate":https://hackage.haskell.org/package/speculate discover properties
75
*** "fitspec":https://hackage.haskell.org/package/fitspec refine properties by mutation
76
** "hedgehog":https://github.com/hedgehogqa/haskell-hedgehog property
77 73 Grigoriy Volkov
*** "How to use Hedgehog to test a real world, large scale, stateful app":https://jacobstanley.io/how-to-use-hedgehog-to-test-a-real-world-large-scale-stateful-app/
78 77 Grigoriy Volkov
*** "supports state machines":http://hackage.haskell.org/package/hedgehog-1.0.2/docs/Hedgehog.html#t:Command
79 44 Grigoriy Volkov
** "dejafu":https://github.com/barrucadu/dejafu concurrency
80
** "type-spec: type level testing eDSL":https://hackage.haskell.org/package/type-spec
81
** "should-not-typecheck":https://github.com/CRogers/should-not-typecheck
82 1 Grigoriy Volkov
* Constraints:
83 34 Grigoriy Volkov
** https://github.com/ekmett/constraints
84
** https://github.com/mikeizbicki/ifcxt
85
** https://github.com/rampion/constraint-unions
86
* HKD:
87
** https://github.com/jcpetruzza/barbies
88
** https://github.com/i-am-tom/higgledy
89 1 Grigoriy Volkov
** https://hackage.haskell.org/package/rank2classes
90 44 Grigoriy Volkov
* (Reversible) Parsing:
91 68 Grigoriy Volkov
** https://yairchu.github.io/posts/codecs-as-prisms.html
92 56 Ilya Kostyuchenko
** invertible-grammar _by Eugene Smolanka, Sergey Vinokurov_ 
93 57 Ilya Kostyuchenko
*** http://hackage.haskell.org/package/invertible-grammar
94 78 Grigoriy Volkov
** Syntax _by Paweł Nowak (Pavel Christof?) @2014_
95 43 Denis Buzdalov
*** https://hackage.haskell.org/package/syntax
96
*** https://hackage.haskell.org/package/syntax-attoparsec
97
*** https://hackage.haskell.org/package/syntax-printer
98 1 Grigoriy Volkov
*** https://hackage.haskell.org/package/semi-iso
99 58 Denis Buzdalov
** Unparse _by Tillmann Rendel and Klaus Ostermann @2010_ ("paper":https://www.informatik.uni-marburg.de/~rendel/unparse/)
100
*** invertible-syntax _by Tillmann Rendel @2010_
101
**** https://hackage.haskell.org/package/invertible-syntax _@2010-2011_
102
**** https://hackage.haskell.org/package/partial-isomorphisms _@2011-2017_
103
**** https://hackage.haskell.org/package/invertible _@2016-2018_
104 59 Denis Buzdalov
*** invertible-grammar _by Eugene Smolanka and Sergey Vinokurov @2015-2019_
105 58 Denis Buzdalov
**** https://hackage.haskell.org/package/invertible-grammar _@2015-2019_
106
**** "Reversible S-expression parser":https://github.com/esmolanka/sexp-grammar _@2015-2019_
107 54 Denis Buzdalov
** Fresnel, Prism-based unified parsers and pretty printers _by Fraser Tweedale @2016_
108
*** https://github.com/frasertweedale/hs-fresnel _@2016-2017_
109
** (related) new @optics@ library, alternative to @lens@ _@2019_
110 47 Denis Buzdalov
*** "Announcement":https://www.well-typed.com/blog/2019/09/announcing-the-optics-library/
111
*** https://hackage.haskell.org/package/optics
112
*** https://hackage.haskell.org/package/optics-core
113 81 Grigoriy Volkov
*** https://hackage.haskell.org/package/generic-optics
114 75 Grigoriy Volkov
** (related) "generic-lens":https://github.com/kcsongor/generic-lens
115 54 Denis Buzdalov
** (related) Binary (ByteString-based) serialization _by Lennart Kolmodin @2006-2019_
116
*** https://hackage.haskell.org/package/binary
117 79 Grigoriy Volkov
** monadic
118
*** "Towards monadic bidirectional serialization":https://blog.poisson.chat/posts/2016-10-12-bidirectional-serialization.html
119
*** "Monadic profunctors for bidirectional programming":https://blog.poisson.chat/posts/2017-01-01-monadic-profunctors.html
120 3 Grigoriy Volkov
121
h2. exts
122
123 16 Grigoriy Volkov
* "Existential Quantification":https://ocharles.org.uk/guest-posts/2014-12-19-existential-quantification.html
124 3 Grigoriy Volkov
* "RebindableSyntax":https://ocharles.org.uk/guest-posts/2014-12-06-rebindable-syntax.html — overloading built-in operators / do notation
125
* "NullaryTypeClasses":https://ocharles.org.uk/posts/2014-12-10-nullary-type-classes.html — global implementation of one thing
126 5 Grigoriy Volkov
* "DataKinds":http://ponies.io/posts/2014-07-30-typelits.html , TypeFamilies (+ GHC.TypeLits) — type-level annotations
127
** "Basic Type Level Programming in Haskell":https://www.parsonsmatt.org/2017/04/26/basic_type_level_programming_in_haskell.html
128
** "Parsing type-level strings in Haskell":https://kcsongor.github.io/symbol-parsing-haskell/
129 11 Grigoriy Volkov
** "Servant, Type Families, and Type-level Everything":https://arow.info/blog/posts/2015-07-10-servant-intro.html
130 1 Grigoriy Volkov
** "Haskell Type Names as Strings":http://www.mchaver.com/posts/2017-12-12-type-name-to-string.html
131
132
h2. other
133
134
* https://github.com/cohomolo-gy/haskell-resources
135
* "ST Monad":https://medium.com/permutive/having-your-cake-and-eating-it-9f462bf3f908 for imperative algorithms
136
* "A Rosetta Stone for Haskell Abstractions":http://reduction.io/essays/rosetta-haskell.html Applicative, StateT, Lens
137
* "Is it possible to place inequality constraints on haskell type variables?":https://stackoverflow.com/questions/6939043/is-it-possible-to-place-inequality-constraints-on-haskell-type-variables
138
* "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'":https://www.reddit.com/r/haskell/comments/b5g70h/practical_uses_of_the_tardis_monad/ejdogtt/
139
* "Comonadic builders":https://chshersh.github.io/posts/2019-03-25-comonadic-builders
140 44 Grigoriy Volkov
* "GHC.Stack":https://hackage.haskell.org/package/base-4.10.0.0/docs/GHC-Stack.html — can get code position for DSL
141
* "GHC's Specializer: Much More Than You Wanted to Know":https://reasonablypolymorphic.com/blog/specialization/
142
* "Type Classes and Constraints":https://gist.github.com/Icelandjack/5afdaa32f41adf3204ef9025d9da2a70
143 61 Grigoriy Volkov
* "Reified dictionaries":https://kseo.github.io/posts/2017-02-06-reified-dictionaries.html GADT allows us to reify a constraint as an explicit dictionary
144 50 Grigoriy Volkov
* "Demystifying MonadBaseControl":https://lexi-lambda.github.io/blog/2019/09/07/demystifying-monadbasecontrol/
145 62 Grigoriy Volkov
* "The Functor Combinatorpedia":https://blog.jle.im/entry/functor-combinatorpedia.html
146 44 Grigoriy Volkov
* Cont:
147
** "Control.Monad.Trans.Cont":https://hackage.haskell.org/package/transformers-0.5.2.0/docs/Control-Monad-Trans-Cont.html
148
** "CC-delcont":https://wiki.haskell.org/Library/CC-delcont
149
** "Delimited continuations in Haskell":http://okmij.org/ftp/continuations/Haskell-tutorial.pdf
150
** "A Monadic Framework for DelimitedContinuations":https://www.cs.indiana.edu/~dyb/pubs/monadicDC.pdf
151
** "Haskell's continuation monad":https://github.com/quchen/articles/blob/master/cont_monad.md
152
* Tagless Final / Overloading:
153 33 Grigoriy Volkov
** "Introduction to Tagless Final":https://serokell.io/blog/tagless-final
154 1 Grigoriy Volkov
** "Tagless Final Encoding in Haskell":https://jproyo.github.io/posts/2019-03-17-tagless-final-haskell.html
155
** "Typed final (aka, ``tagless-final'') style":http://okmij.org/ftp/tagless-final/ is a general method of embedding domain-specific languages (DSL)
156 44 Grigoriy Volkov
** "Overloading lambda":http://conal.net/blog/posts/overloading-lambda
157 27 Grigoriy Volkov
* TypeFamilies:
158 45 Grigoriy Volkov
** "Functional Dependencies & Type Families":https://gvolpe.github.io/blog/functional-dependencies-and-type-families/
159 27 Grigoriy Volkov
** "Associated Types and Haskell":http://amixtureofmusings.com/2016/05/19/associated-types-and-haskell/
160 33 Grigoriy Volkov
** "Partially applied type families GHC Proposal":https://github.com/ghc-proposals/ghc-proposals/pull/52
161 29 Grigoriy Volkov
** "On the arity of type families":https://ryanglscott.github.io/2019/05/26/on-the-arity-of-type-families/ + "Higher-order Type-level Programming in Haskell":https://www.microsoft.com/en-us/research/uploads/prod/2019/03/ho-haskell-5c8bb4918a4de.pdf
162 30 Grigoriy Volkov
** "Type Class Instances for Type-Level Lambdas in Haskell":ftp://ftp-sop.inria.fr/indes/TFP15/TFP2015_submission_19.pdf
163 33 Grigoriy Volkov
** "Defunctionalization for Haskell Type Families":https://free.cofree.io/2019/01/08/defunctionalization/
164 87 Grigoriy Volkov
** "Haskell with only one type family":https://blog.poisson.chat/posts/2018-08-06-one-type-family.html - fcf first-class families
165
*** "fcf-containers: recursive schemes!":https://hackage.haskell.org/package/fcf-containers-0.5.0/docs/Fcf-Alg-Morphism.html
166 34 Grigoriy Volkov
* HKD:
167
** "Functor Functors":http://web.archive.org/web/20190501095522/https://www.benjamin.pizza/posts/2017-12-15-functor-functors.html
168
** "Higher-Kinded Data":https://reasonablypolymorphic.com/blog/higher-kinded-data/ 
169 1 Grigoriy Volkov
** "Deriving instances for higher-kinded data":https://stackoverflow.com/questions/49618667/deriving-instances-for-higher-kinded-data
170 63 Grigoriy Volkov
* "Haskell's kind system - a primer":https://diogocastro.com/blog/2018/10/17/haskells-kind-system-a-primer/
171 64 Grigoriy Volkov
* "Advent of optics":https://chrispenner.ca/posts/advent-of-optics-01 (не в смысле библиотеки optics)
172
* "Four ways to partially apply constraint tuples":https://ryanglscott.github.io/2019/11/30/four-ways-to-partially-apply-constraint-tuples/
173 82 Grigoriy Volkov
* "Opaque constraint synonyms":https://kcsongor.github.io/opaque-constraint-synonyms/
174 83 Grigoriy Volkov
* "Tripping up type inference / Ambiguous Tags":https://kcsongor.github.io/ambiguous-tags/
175 85 Grigoriy Volkov
* "Building a Friendly and Safe EDSL with IxState and TypeLits":https://free.cofree.io/2020/02/29/dsl/ config builder
176 86 Grigoriy Volkov
* "Haskell with UTF-8":https://serokell.io/blog/haskell-with-utf8
177
* "ooh Object Oriented Haskell":https://github.com/complyue/ooh :D
178
* "Visual Arrow Syntax":https://jaspervdj.be/posts/2020-03-12-visual-arrow-syntax.html :D