haskell-jp / questions #97 at 2021-06-08 09:26:34 +0900

servantについて質問です。

Tutorialのfirst exampleのstartAppを1つの関数にまとめたらどうなるのかやってみようとして失敗しました。
Tutorialのプログラムの startAppUserAPI1 型に依存するはずですが、`myStartApp` にはこの型の変数を引数に取ることがないので、代わりに型変数 apiType を取るようにするためにforallを使ってみたのですが、
Illegal symbol forall in type
というエラーが出てうまくいきません。
どのように記述すればいいでしょうか?
ExplicitForAll 言語拡張は有効にしていますか?
https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/explicit_forall.html
ありがとうございます。これを入れたらforallの部分は通りました。

しかし、returnTypeの部分が通らないですね。
Serverの返り値のソースを調べてみると、実際には一般の型returnTypeではなく、apiTypeに依存する型でないといけないみたいで、`:>`や <:> などの構成子の入れ子から型を取り出す必要があり、この作用を記述しないといけないみたいです。
ちゃんとソースが読めていないのですが、思っていたより、かなり難しそうですね...
一応これでいけました!
returnTypeとapiTypeの依存関係を`~` を使って表すのがミソだと思います