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 ()と型を明示して解決しました.