モナドを効率的に操作することに関しては、まだ「そこ」に達していないことを認めなければならないので、これが簡単な質問である場合はご容赦ください。また、この質問は私が現在取り組んでいる実際の実装よりも概念に関連しているため、動作するコードを提供していないことをお詫びする必要があります。
私は SQLite(3) データベースに対して作業を行っています。もちろん、それにクエリを送信して結果を取得したいと考えています。すでに IO にあるため、関数は変換が必要な をfetchAllRows
返します。[[SqlValue]]
SQLite はテキストと浮動小数点値に関して非常にリベラルであるため (Haskell は型に関してはまったくリベラルではありません)、安全な変換を使用するのsafeFromSql
が適切と思われます。さて、これらすべてを 1 つの関数で行うことができた場合、その関数は次のようになります。
myfunc :: String -> [SqlValue] -> IO [[ Either ConvertError a]]
またはそのようなものですよね?ネストされたモナドの構造を扱うことは、私が気付いていない作業を容易にする標準的な方法があるほど一般的である(そして十分に面倒である)ように思えますか?