{
  "$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"
}