{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiatsktxzuphjh4ebpykd25nggqpbyhcea2csbqqi6ruil5fgqnbfa",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mfqax5eziym2"
},
"path": "/t/applicative-wired-monad-pattern/12779?page=2#post_24",
"publishedAt": "2026-02-26T02:02:19.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"`kan-extensions:Data.Functor.Coyoneda.Coyoneda`",
"@ocharles",
"providing an API for extensible effects and monad transformers"
],
"textContent": "You could use `kan-extensions:Data.Functor.Coyoneda.Coyoneda` for that if you don’t need the intermediate free `Applicative`, at which point you’ve hit on the same type as the one that shows up in @ocharles 's providing an API for extensible effects and monad transformers:\n\n\n class Monad m => MonadListenBrainz m where\n liftListenBrainz :: Free (Coyoneda ListenBrainzAPICall) a -> m a\n",
"title": "Applicative-wired monad pattern"
}