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