Haskell » History » Version 88
Denis Buzdalov, 03/24/2021 12:22 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 | 88 | Denis Buzdalov | ** "Олег Нижников, Современное ФП с Tagless Final":https://www.youtube.com/watch?v=sWEtnq0ReZA (синтаксис Scala) |
158 | 27 | Grigoriy Volkov | * TypeFamilies: |
159 | 45 | Grigoriy Volkov | ** "Functional Dependencies & Type Families":https://gvolpe.github.io/blog/functional-dependencies-and-type-families/ |
160 | 27 | Grigoriy Volkov | ** "Associated Types and Haskell":http://amixtureofmusings.com/2016/05/19/associated-types-and-haskell/ |
161 | 33 | Grigoriy Volkov | ** "Partially applied type families GHC Proposal":https://github.com/ghc-proposals/ghc-proposals/pull/52 |
162 | 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 |
163 | 30 | Grigoriy Volkov | ** "Type Class Instances for Type-Level Lambdas in Haskell":ftp://ftp-sop.inria.fr/indes/TFP15/TFP2015_submission_19.pdf |
164 | 33 | Grigoriy Volkov | ** "Defunctionalization for Haskell Type Families":https://free.cofree.io/2019/01/08/defunctionalization/ |
165 | 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 |
166 | *** "fcf-containers: recursive schemes!":https://hackage.haskell.org/package/fcf-containers-0.5.0/docs/Fcf-Alg-Morphism.html |
||
167 | 34 | Grigoriy Volkov | * HKD: |
168 | ** "Functor Functors":http://web.archive.org/web/20190501095522/https://www.benjamin.pizza/posts/2017-12-15-functor-functors.html |
||
169 | ** "Higher-Kinded Data":https://reasonablypolymorphic.com/blog/higher-kinded-data/ |
||
170 | 1 | Grigoriy Volkov | ** "Deriving instances for higher-kinded data":https://stackoverflow.com/questions/49618667/deriving-instances-for-higher-kinded-data |
171 | 88 | Denis Buzdalov | ** "Олег Нижников, Выпекаем типы данных с HKD":https://www.youtube.com/watch?v=2aX6_5mTdkw (в синтаксисе Scala) |
172 | 63 | Grigoriy Volkov | * "Haskell's kind system - a primer":https://diogocastro.com/blog/2018/10/17/haskells-kind-system-a-primer/ |
173 | 64 | Grigoriy Volkov | * "Advent of optics":https://chrispenner.ca/posts/advent-of-optics-01 (не в смысле библиотеки optics) |
174 | * "Four ways to partially apply constraint tuples":https://ryanglscott.github.io/2019/11/30/four-ways-to-partially-apply-constraint-tuples/ |
||
175 | 82 | Grigoriy Volkov | * "Opaque constraint synonyms":https://kcsongor.github.io/opaque-constraint-synonyms/ |
176 | 83 | Grigoriy Volkov | * "Tripping up type inference / Ambiguous Tags":https://kcsongor.github.io/ambiguous-tags/ |
177 | 85 | Grigoriy Volkov | * "Building a Friendly and Safe EDSL with IxState and TypeLits":https://free.cofree.io/2020/02/29/dsl/ config builder |
178 | 86 | Grigoriy Volkov | * "Haskell with UTF-8":https://serokell.io/blog/haskell-with-utf8 |
179 | * "ooh Object Oriented Haskell":https://github.com/complyue/ooh :D |
||
180 | * "Visual Arrow Syntax":https://jaspervdj.be/posts/2020-03-12-visual-arrow-syntax.html :D |