git-annex/doc/todo/ditch_yesod.mdwn
Yaroslav Halchenko 0151976676
Typo fix unncessary -> unnecessary.
Detected while reading recent CHANGELOG entry but then decided to apply
to entire codebase and docs since why not?
2022-08-20 09:40:19 -04:00

36 lines
1.8 KiB
Markdown

I'd like to move away from using yesod for the web app, for a number of
reasons:
* It's by far the largest use of TH in git-annex, and TH is of course very
painful for the android port, other builds like debian mips that don't
currently support TH, etc. (Update: mips does support it now, it seems!)
* I think it's responsible for at least 50% of the executable size, and I
suspect a lot of that is unnecessary bloat for parts of yesod that
git-annex doesn't really use.
* Hamlet constantly annoys me by rejecting any file that contains tabs.
**Rage**
* Hamlet contains code that's not really haskell, but looks a lot like it.
This is a continual frustration when dealing with the hamlet files.
* I find that Hamlet does not lend itself to being refactored, everything
is essentially an IO action with side effects of generating html, so
can't really bring proper FP tools to bear.
At the moment, servant seems like the nicest place to end up. Just as type
safe as yesod afaik, and very lightweight and simple and rather awesome.
As for the html generation, lucid seems like a good way to do it. Just as
fast as hamlet, and pure haskell code.
Game plan:
1. Upload a yesod-lucid to hackage. (done)
2. Get servant (done), lucid (done), maybe yesod-lucid, packaged in Debian
3. Start converting individual yesod Handler Html to Handler LucidHtml.
This will ditch the hamlet. This is by far the most work, but it can be
done incrementally w/o breaking the build.
4. Need to find a way to deal with Hamlet widgets that add CS and JS to
the page. Hamlet basically serves as a Writer monad to collect the HTML,
CS, and JS that widgets add to a page, so a replacement for that would
need to be developed.
5. Once all the hamlet is gone, remove the rest of the yesod stuff and
re-implement the routing etc with servant.