This is not snark. Why Koka when ML and Haskell exist? What does it bring to the table that is new? What Haskell calls monads Koka calls effects? But Haskell has lazy evaluation, right -- and Koka is strict (like ML) and tracks effects (like Haskell). Does Koka complete this reductive functional programming matrix?
/ Monads / No monads†
-----------------------
S | Koka | ML
L | Haskell | Miranda
† No monads == Nomads?Also, the way Haskell handles composing effects (monad transformers), while precise, sometimes leaves a lot to be desired in terms of usability. That's why other approaches to managing effectful computations are being explored, like algebraic effects.
row Fields = [name: String, age: Int]
type Person = MkRecord Fields
Which have kinds: MkRecord :: Row Type -> Type
Fields :: Row Type
Person :: Type
You can construct variant types in a similar way: row Cases = [success: SyntaxTree, failure: ParseError]
type ParseResult = MkVariant Cases
Which have kinds: MkVariant :: Row Type -> Type
Cases :: Row Type
ParseResult :: Type
Rows may contain things other than proper types, for example: row Effects = [foo: State s, bar: Except e]
type Action = MkFunction Effects
Which have kind: -- function types now take three arguments:
-- - row of effects
-- - argument type
-- - return type
MkFunction :: Row Effect -> Type -> Type -> Type
Effects :: Row Effect
Action :: Type -> Type -> Type row = sequence
record = named conjunctive sequence
variant = named disjunctive sequence
:)Can you explain what you mean when you say "proper" types? (So I can get what you mean from there on out.) Are all your examples using regular standard Haskell syntax? (I get that you are making up type (and kind) names for illustration purposes). Thanks!
When I was gathering information about typed languages that compile to JS, I found Elm rather nice, but calling JS libs was rather cumbersome. Somewhere I read that PureScript has a better integration with JS, so I thought it was a "thinner" layer :D
Also, Purescript's FFI is really easy to use (unlike Elm's), afaik this was one of its original design goals.
That's news to me. Could you post a proof?