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