Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/igrep/wai-sample
Prototype of a new web application framework based on WAI.
https://github.com/igrep/wai-sample
framework haskell webapp
Last synced: about 3 hours ago
JSON representation
Prototype of a new web application framework based on WAI.
- Host: GitHub
- URL: https://github.com/igrep/wai-sample
- Owner: igrep
- License: apache-2.0
- Created: 2020-10-14T08:58:56.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-30T08:33:50.000Z (9 days ago)
- Last Synced: 2024-10-30T09:22:16.248Z (9 days ago)
- Topics: framework, haskell, webapp
- Language: Haskell
- Homepage:
- Size: 641 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.ja.md
- Changelog: ChangeLog.md
- License: LICENSE
Awesome Lists containing this project
README
# wai-sample
作成中の、新しい[WAI](https://www.stackage.org/package/wai)ベースのウェブアプリケーションフレームワーク(名前未定)と、そのサンプルアプリを含んだリポジトリーです。
## なぜ新しいフレームワークを?
### 「[Servant](https://docs.servant.dev/en/stable/)でやっていることの大半は、型レベルプログラミングに頼らなくてもできるのでは?」という仮説から
Haskellの世界では現在[Servant](https://docs.servant.dev/en/stable/)と[Yesod](https://www.yesodweb.com/)の二つのウェブアプリケーションフレームワークが有名ですが、この二つはいずれも型レベルプログラミングか独自のDSLという、ちょっと敷居の高い技術の学習を要求します。とりあえず使うだけであればサンプルコードに従って雰囲気で書けば十分なのですが、仕組みが分かりづらく、トラブルシューティングや凝った応用がしにくいでしょう。そこで、型レベルプログラミングに頼らず、**できるだけ単純なHaskell**によって、ユーザーが理解しやすく、なおかつServantに負けないくらい高度な機能を持ったウェブアプリケーションフレームワークを作ることを目指します。
### [makeMistakesToLearnHaskell](https://github.com/haskell-jp/makeMistakesToLearnHaskell)の配信用サーバーとして、誰でもハックできるフレームワークにしたいから
[makeMistakesToLearnHaskell](https://github.com/haskell-jp/makeMistakesToLearnHaskell)は、私がのんびり開発・執筆しているHaskell学習用アプリケーションです(詳細は以前書いた「[Haskell社内勉強会とHaskell学習ツールの紹介](https://eng-blog.iij.ad.jp/archives/3467)」という記事をご覧ください)。makeMistakesToLearnHaskellは、現在はコマンドラインアプリケーションとしてインストールして実行するものですが、インストールするためにはGHCとかをインストールしないといけないので、そこでハマるひとが多数いました。
- ➡️インストール不要なものを作ろう
- ➡️ ユーザーが入力したコードをサーバーで実行して判定するサーバー
- ➡️ フレームワークから作ろう
- ➡️ Haskell学習したて人でも修正できるOSSにしたいという理想により、簡単に理解できるフレームワークから作ることに
- ➡️ 型レベルプログラミングなど、GHCの高度な機能なしで使えるフレームワーク## 2021年7月現在までの開発
### 2020年10月~2020年12月
これより前は、makeMistakesToLearnHaskellの開発を配信しながら学習する、という進め方をしていましたが、ネタ切れ
➡️サーバーをフレームワークから作ろう!💡makeMistakesToLearnHaskell自身も「習いたてのHaskellerでも開発できる」ことを目指しているので、勉強会で配信するのにも向いていた
[プログラミングHaskell](https://www.lambdanote.com/products/haskell)の第13章を参考にパスをパースして、マッチしたパスに登録したアクションを起動
### 2020年12月~2021年1月
ルーティングテーブルを構成する型を defunctionalize して、複数の解釈ができるように。
- ⚠️当時は defunctionalization と呼んでいたけど、合っているかな?
- ➡️ルーターだけでなく、ルーティングテーブルの生成もできるようになった!### 2021年2月~2021年6月
クライアントの自動生成にもチャレンジ
- handlerの名前を指定するようになったのがポイント
- 😓なるべく使いたくなかったけど、さすがにTemplate Haskellを使わなければダメだった
- その他、大本の設計にもミスが見つかったので修正### 2021年6月~
- (WIP) パスのパースを、`pathInfo`関数が返した`[Text]`に対して行うのではなく、`[Text]`を`/`でくっつけた`Text`に対してパースすることで、ユーザーがパースをより柔軟にできるように
- 🤔Servantなどではどうやって実現してるんだろう