• 作成:

yesodでprovideRepTypeの中でredirect出来ない時は型を明示しましょう

混乱メモ.

yesodでコンテンツを直接配信するのではなくredirectでS3などのファイル保存場所のURLにリダイレクトするようにしようとしていました.

とりあえず実際のAPIは作らずにundefinedで関数たちを置いておいて, ハンドラー側の呼び出し機構だけ書いておこうとしていました.

しかし困っていました. ファイルを配信するハンドラーは2つあって, 片方はそのままredirect出来るのですが, もう片方はselectRep, provideRepType typeJsonでjsonのリクエストにも対応できるようにしていて, ファイル送信はprovideRepType typeOctetにしているので, これをsendFileからredirectに切り替えると, 型エラーになってコンパイルが通らなくなります.

provideRepType typeHtmlにすれば良いのかなと思って切り替えてみましたが, • Could not deduce (ToContent a0) arising from a use of ‘provideRepType’という風に型が特定できないとコンパイルエラーが出ていました.

と, ここまで書いて整理して気が付きましたが, 特定できないエラーが出ているならなら型注釈を直接書けば良いなと気が付きました.

(redirect $ decodeUtf8 url) :: Handler ()と型を明示して解決しました.