Hi,
… long slightly technical post, ignore if not interested …
I’m back at this forum after being away for some time.
I’m an FP/OOP veteran who is semi-retired (which means that, besides cycling and gardening I (finally) have time for my addiction).
I’ve been working on programming using program descriptions (monads, applicatives, arrows or what have you) since the nineties.
Since I have a bit more time now I am planning to write a book (no publisher yet) with (among others) the following goals in mind
- use Dotty and exploit its power/elegance of expression
- self-contained explanation of programming using program descriptions
[ the approach is top-down rather than bottom-up ] - encourage pointfree decriptions spiced with a bit of Dotty DSL flavor
[ monads encourage pointful, arrows encourage pointfree ]
[ pointfree is traditionally considererd a bit cumbersome but Dotty DSL flavor comes to the rescue ]
[ this is challenging, not sure how far I can push this but the future looks bright ] - …
I have two github projects
(1) https://github.com/LucDupAtGitHub/Feature-Based-Functional-Programming-with-Dotty
(2) https://github.com/LucDupAtGitHub/Feature-Based-Functional-Programming-Book
I stated with (1) and I am as far as
- basic program features: identity, composition, local defs (product), if-then-else control (sum))
[ implemented in an active way using>-a->
whereZ >-a-> Y == Z => Y
] - failure
[>--a->
transformed to the failure world>-at->
whereZ >-at-> Y == Z >-a-> Try[Y]
(for someTry[+ _]
) ] - parallelism
[>-a->
transformed to the reactive world>-r->
whereZ >-r-> Y == (Z >-a=> Unit) >-a-> Unit
] - state
[>-a->
transformed to the stateful world>-as->
whereZ >-as-> Y == Z >-a-> (S >-a-> (S, Z))
] - (advanced) control
[ a bit more complex, but let’s say a pointfree version of delimited continuations … ] - and, of course, all combinations …
The code works, but is not fully cleaned up yet. There is dcocumentation in the README.md.
Recently I decided to go for (2) as a replacement of (1)
- clean up code
- use LaTeX to produce high quality pdf output
Please have a look if you are interested.
All feedback are welcome.
Do not hesitate to contact me [email protected]
Cheers,
Luc