Open jhhuh opened 1 year ago
@lsg6140 @sepiabrown @jjdosa @kwkim00
Why don't we have a few special guest sessions once those FP kata sessions are done? Like..
singletons
library, and dependent types (@kwkim00)As for each topic being a complete concise single so that both the taker and giver get benefit from, hopefully.
I know we are quite busy for many things. It is just an idea for the time when we have a time.
@jhhuh @lsg6140 @sepiabrown @jjdosa
I like this! :+1:
if we all agree with this, why don't we start the first session after submitting the Jun Report?
I love this suggestion!!!
But, it is difficult to estimate when the FP kata will be done. :joy:
I believe that adding Scrap Your Boilerplate
to the list would be beneficial. However, I am concerned that too much emphasis is being placed on high-level aspects of Haskell for Kata practitioners. It may be more effective to include implementation practices that utilize the skills learned thus far, allowing Kata practitioners to become comfortable with implementing functional code that they could write with ease in a language they are more familiar with, even if the implementation is untidy or disorganized.
My suggestion is to organize a term project period for Kata practitioners to develop a program of moderate size that is neither too small with only a few snippets of code nor too large like a full-fledged application. Once the program is completed, it can be reviewed to identify areas that could benefit from advanced programming techniques, such as typeclass metaprogramming, dependent types, F-algebra, free monad, and so on. This approach provides concrete motivation for advanced programming techniques, as practitioners can see how they can be applied in real programming scenarios. During the refactoring process, advanced theoretical concepts can be incorporated through theory sessions that will solidify the practitioner's understanding of the concepts.
Topics in Haskell beyond LYAH
Type theory related
Functor-Applicative-Monad
typeclass hierarchy (covered in LYAH)State
monad (covered in LYAH)GeneralZipper
as a derivative to ADT (covered in LYAH)Monad Stack (
mtl
library)Monadic Parser (
attoparsec
library,parsec
library)JSON parser (
aeson
library)General
Applicative
programming (generalization tozipWith
etc)Original paper: https://dl.acm.org/doi/10.1017/S0956796807006326
Foldable
andTraversable
typeclassesArrow
andCategory
typeclassesGeneralized Algebraic Data Types (
GADT
)Type family / data family
Existential quantification (Important)
Type application
()
type,Void
type,undefined
vsabsurd
(relation to the CategoryHask
)GHC runtime related
Strictness annotation, and
seq
vsdeepseq
Parallelism and
par
-monad(Un-)/boxed types and Thunks
Stream (
Pipes
,Conduit
, andStreamly
libraries) andIteratee
(Very important for our use case)Vector library
Foreign Function Interface (
FFI
)Resource handling and Exceptions
Mutable states and strict state threads (
IORef
,ST
monad,STRef
)On how to program in Haskell
Lens
library,Profunctor
, and general optics (relation to Yoneda lemma?)Template Haskell and Quasi Quotation
ReaderT
pattern + Capability constraints (and RIO library)Concurrency primitives (
forkIO
,MVar
, etc)Software Transaction Memory (
STM
) andasync
library (atomically
,TVar
,async
,Concurrently
, etc) (Important for our use case)DataKinds
and phantom types + basic type-level programming (case study inservant
andsafe-money
libraries)Typeclass metaprogramming
Reflection
and type witness and proofsingletons
library, and dependent typesRecursion Schemes (and F-algebra)
Beyond monad stack and Interpreter pattern (Algebraic Effects systems and Free Monad)