Project

General

Profile

Haskell » History » Revision 46

Revision 45 (Grigoriy Volkov, 08/28/2019 02:20 PM) → Revision 46/90 (Grigoriy Volkov, 08/28/2019 02:25 PM)

h1. Haskell 

 h2. Изучение 

 Денис Москвин. Функциональное программирование на языке Haskell. stepik.org, видеокурс 
 > "Часть 1.":https://stepik.org/course/75/syllabus 
 > "Часть 2.":https://stepik.org/course/693/syllabus 

 "О Haskell по-человечески":https://www.ohaskell.guide 
 "Learn You a Haskell for Great Good!":http://learnyouahaskell.com 
 "Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen":http://book.realworldhaskell.org 

 "ru.haskell— сообщество русскоговорящих Haskell-разработчиков":https://ruhaskell.org 
 > "Полезные ссылки":https://ruhaskell.org/links.html 

 "ru.haskell wiki":https://github.com/ruHaskell/ruhaskell/wiki 
 > "Настройка редакторов для поддержки 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 

 "Haskell Cheatsheet":http://bxt.github.io/Ludus/haskell-cheatsheet/ 
 "haskell-trainings":https://github.com/google/haskell-trainings/releases 
 "Stack cookbook":https://guide.aelve.com/haskell/stack-cookbook-ai0adh03 
 "The Haskell Phrasebook":https://typeclasses.com/phrasebook 

 h2. Best practices 

 * "Import modules properly":https://wiki.haskell.org/Import_modules_properly 

 h2. snippets 

 * [[HaskellMaybeChecks]] 
 * [[HaskellTypeLevelMachine]] 

 h2. ghci debugging 

 <pre> 
 :set -fbreak-on-error -fbreak-on-exception 
 :trace machineMain 
 :force _exception 
 :hist 
 :back 
 </pre> 

 h2. libs 

 * "co-log":https://kowainik.github.io/posts/2018-09-25-co-log 
 * "named":https://github.com/monadfix/named arguments 
 * "refined":http://nikita-volkov.github.io/refined/ — refinement types <pre>type ProperFraction = Refined (And (Not (LessThan 0)) (Not (GreaterThan 1))) Double</pre> 
 * "Data.Sequence":http://hackage.haskell.org/package/containers-0.6.0.1/docs/Data-Sequence.html — list with fast append on both sides 
 * "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 
 * "Workflow":https://github.com/agocorona/Workflow — computations resumable from storage (!) 
 * SMT: 
 ** "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. 
 ** "SBV: SMT Based Verification":https://leventerkok.github.io/sbv/ — translates Haskell functions on custom symbolic types 
 * Testing: 
 ** "leancheck":https://hackage.haskell.org/package/leancheck enumerative property-based testing core 
 *** "extrapolate":https://hackage.haskell.org/package/extrapolate generalize counter-examples of properties 
 *** "speculate":https://hackage.haskell.org/package/speculate discover properties 
 *** "fitspec":https://hackage.haskell.org/package/fitspec refine properties by mutation 
 ** "hedgehog":https://github.com/hedgehogqa/haskell-hedgehog property 
 ** "dejafu":https://github.com/barrucadu/dejafu concurrency 
 ** "type-spec: type level testing eDSL":https://hackage.haskell.org/package/type-spec 
 ** "should-not-typecheck":https://github.com/CRogers/should-not-typecheck 
 * Constraints: 
 ** https://github.com/ekmett/constraints 
 ** https://github.com/mikeizbicki/ifcxt 
 ** https://github.com/rampion/constraint-unions 
 * HKD: 
 ** https://github.com/jcpetruzza/barbies 
 ** https://github.com/i-am-tom/higgledy 
 ** https://hackage.haskell.org/package/rank2classes 
 * (Reversible) Parsing: 
 ** by Paweł Nowak (Pavel Christof?) @2004 *USED NOW* 
 *** https://hackage.haskell.org/package/syntax 
 *** https://hackage.haskell.org/package/syntax-attoparsec 
 *** https://hackage.haskell.org/package/syntax-printer 
 *** https://hackage.haskell.org/package/semi-iso 
 ** Unparse by Tillmann Rendel and Klaus Ostermann @2010 
 *** https://www.informatik.uni-marburg.de/~rendel/unparse/ 
 *** http://hackage.haskell.org/package/invertible-syntax 
 *** https://hackage.haskell.org/package/partial-isomorphisms 
 *** https://hackage.haskell.org/package/invertible 
 ** https://hackage.haskell.org/package/binary 

 h2. exts 

 * "Existential Quantification":https://ocharles.org.uk/guest-posts/2014-12-19-existential-quantification.html 
 * "RebindableSyntax":https://ocharles.org.uk/guest-posts/2014-12-06-rebindable-syntax.html — overloading built-in operators / do notation 
 * "NullaryTypeClasses":https://ocharles.org.uk/posts/2014-12-10-nullary-type-classes.html — global implementation of one thing 
 * "DataKinds":http://ponies.io/posts/2014-07-30-typelits.html , TypeFamilies (+ GHC.TypeLits) — type-level annotations 
 ** "Basic Type Level Programming in Haskell":https://www.parsonsmatt.org/2017/04/26/basic_type_level_programming_in_haskell.html 
 ** "Parsing type-level strings in Haskell":https://kcsongor.github.io/symbol-parsing-haskell/ 
 ** "Servant, Type Families, and Type-level Everything":https://arow.info/blog/posts/2015-07-10-servant-intro.html 
 ** "Haskell Type Names as Strings":http://www.mchaver.com/posts/2017-12-12-type-name-to-string.html 

 h2. other 

 * https://github.com/cohomolo-gy/haskell-resources 
 * "ST Monad":https://medium.com/permutive/having-your-cake-and-eating-it-9f462bf3f908 for imperative algorithms 
 * "A Rosetta Stone for Haskell Abstractions":http://reduction.io/essays/rosetta-haskell.html Applicative, StateT, Lens 
 * "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 
 * "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/ 
 * "Comonadic builders":https://chshersh.github.io/posts/2019-03-25-comonadic-builders 
 * "GHC.Stack":https://hackage.haskell.org/package/base-4.10.0.0/docs/GHC-Stack.html — can get code position for DSL 
 * "GHC's Specializer: Much More Than You Wanted to Know":https://reasonablypolymorphic.com/blog/specialization/ 
 * "Type Classes and Constraints":https://gist.github.com/Icelandjack/5afdaa32f41adf3204ef9025d9da2a70 
 * Cont: 
 ** "Control.Monad.Trans.Cont":https://hackage.haskell.org/package/transformers-0.5.2.0/docs/Control-Monad-Trans-Cont.html 
 ** "CC-delcont":https://wiki.haskell.org/Library/CC-delcont 
 ** "Delimited continuations in Haskell":http://okmij.org/ftp/continuations/Haskell-tutorial.pdf 
 ** "A Monadic Framework for DelimitedContinuations":https://www.cs.indiana.edu/~dyb/pubs/monadicDC.pdf 
 ** "Haskell's continuation monad":https://github.com/quchen/articles/blob/master/cont_monad.md 
 * Tagless Final / Overloading: 
 ** "Introduction to Tagless Final":https://serokell.io/blog/tagless-final 
 ** "Tagless Final Encoding in Haskell":https://jproyo.github.io/posts/2019-03-17-tagless-final-haskell.html 
 ** "Typed final (aka, ``tagless-final'') style":http://okmij.org/ftp/tagless-final/ is a general method of embedding domain-specific languages (DSL) 
 ** "Overloading lambda":http://conal.net/blog/posts/overloading-lambda 
 * TypeFamilies: 
 ** "Functional Dependencies & Type Families":https://gvolpe.github.io/blog/functional-dependencies-and-type-families/ 
 ** "Associated Types and Haskell":http://amixtureofmusings.com/2016/05/19/associated-types-and-haskell/ 
 ** "Partially applied type families GHC Proposal":https://github.com/ghc-proposals/ghc-proposals/pull/52 
 ** "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 
 ** "Type Class Instances for Type-Level Lambdas in Haskell":ftp://ftp-sop.inria.fr/indes/TFP15/TFP2015_submission_19.pdf 
 ** "Defunctionalization for Haskell Type Families":https://free.cofree.io/2019/01/08/defunctionalization/ 
 ** "Haskell with only one type family":https://blog.poisson.chat/posts/2018-08-06-one-type-family.html 
 * HKD: 
 ** "Functor Functors":http://web.archive.org/web/20190501095522/https://www.benjamin.pizza/posts/2017-12-15-functor-functors.html 
 ** "Higher-Kinded Data":https://reasonablypolymorphic.com/blog/higher-kinded-data/  
 ** "Deriving instances for higher-kinded data":https://stackoverflow.com/questions/49618667/deriving-instances-for-higher-kinded-data