0151976676
Detected while reading recent CHANGELOG entry but then decided to apply to entire codebase and docs since why not?
36 lines
1.8 KiB
Markdown
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.
|