
On Sep 28, 2017, at 5:44 AM, Isaac Elliott
wrote: If you're not actually the Monad instance of IO,
Can you explain that qualification?
then `andThen` is (*>) for `Compose RowParser IO a` (https://hackage.haskell.org/package/base-4.10.0.0/docs/Data-Functor-Compose....).
So `rowPrinter` would be
rowPrinter = getCompose $ Compose (printP1 <$> field) *> Compose (printP2 <$> field) *> ... Compose (printPn <$> field)
It's a bit more verbose, but I think it's the best answer.
Indeed this works, and looks more clear than some new unfamiliar operator. This seems to have no measurable run-time cost. Is it reasonable to expect that under the covers no objects boxed as (Compose _) are ever created, and that Compose here is just compile-time syntactic sugar for applying (*>) at the desired layer, so that: getCompose $ Compose (Foo Bar a) *> Compose (Foo Bar b) *> Compose (Foo Bar c) ... *> Compose (Foo Bar z) just compiles down to Foo (Bar a *> Bar b *> Bar c *> ... *> Bar z)? Where, in my case, Foo is "RowParser" and Bar is IO? -- Viktor.