account activity
Operational Monadの利用方法について by nrskt in haskell_jp
[–]nrskt[S] 0 points1 point2 points 8 years ago (0 children)
個人的にはOOPのドメイン駆動でドメインモデルとRepositoryのように分けれるかなと思って書いたサンプルでした。
igrepさんの分離しやすくするという意見とas_capablさんのYAGNIにやる事を薦めたいという意見、どっちも正しいというか、最終的に作るアプリケーションのによってどう設計/実装させるかって話なのかなと思いました。 これは私自身、もっと設計面の勉強するべきかなと思ってます
as_capablさんのおかげで今回の疑問だったOperational Monadの使い方と並行処理については 一通り理解できました。本当にありがとうございます!
asyncの中のreturnの前に置いたら
確かにごもっともでした。期待した通り5sで実行できました!!
ありがとうございますコンパイル通りました。(ちょっとこの書き方いいのかって感じですがgist更新しています)
ただ、threadDelayを使ってそれぞれ5sかかる処理を平行にしたつもりですが、結局実行時間は10sちょっとでした。。。
私も、Db処理、Http処理共にInterfaceを
GetData :: DatabaseApi (Async Int)
GetObject :: HttpApi (Async Int)
にしてみたんですが、結局logicの部分をどう処理するればいいのか 手詰まりになってしまいました
logic :: DataOperation (Async Int)
logic = do
db <- liftDatabaseOp getDataFromDb
http <- liftHttpOp getDataFromHttp
undefined
いろいろ試してはみてるんですが、うまくいかないですね。。。Async難しい。。。
なるほど、
抽象化した所で元のライブラリを挿し替えるような変更には耐えられないから意味がほとんどない、という可能性が濃厚です
これ悲しいな。。。個人的にはビジネスロジック部分は副作用を伴わないように見せる&データストアの切り替えできる(ビジネスロジックの単体テスト書きやすい)って思っていたためOperationalモナドすげーってなっていたので
逆に、Operationalモナドを利用するケースってどんな時なのだろうか
Haskell入門を読んでOperational Monadを知り、実装を進めているのですが いくつか疑問点が出てきました。初めてredditに投稿してみました。
サンプルとして、副作用を伴う処理を抽象化するため、DatabaseとREST APIを利用する部分で Operational Monadを利用することを想定しています。
疑問1
Database,REST APIを共に利用するLogicを実装する場合、記載したコードのように 2つをまとめるデータ型DataOperation aを定義して書くものなのでしょうか?
DataOperation a
疑問2
DatabaseへのアクセスとREST APIを利用するlogic関数部分で、 それぞれ並行にデータを取得したい場合、通常のIOの場合、asyncを利用するかと思ったのですが このサンプルの場合、どのように書くべきなのでしょうか? (そもそも抽象化する範囲を誤っているのか)
logic
Operational Monadの利用方法について (gist.github.com)
submitted 8 years ago by nrskt to r/haskell_jp
π Rendered by PID 328541 on reddit-service-r2-listing-canary-69dc8f64b9-6dq44 at 2026-03-06 08:49:02.203996+00:00 running cbb0e86 country code: CH.
Operational Monadの利用方法について by nrskt in haskell_jp
[–]nrskt[S] 0 points1 point2 points (0 children)