Are nested fmap calls idiomatic Haskell? Given:

*Main&gt; :t text
text
  :: (Selectable s, StringLike str, Ord str) =&gt; s -&gt; Scraper str str


I need to perform "second level" fmap operation:

*Main&gt; let z = fmap (fmap (:[])) text
*Main&gt; :t z
z :: (Selectable s, StringLike a, Ord a) =&gt; s -&gt; Scraper a [a]


On one hand z follows API structure, but otherwise I find such code hard to read. It feels like programming against stack-based machine.
Sometimes you can wrap the "nested functors" in a newtype which is itself a functor, use a single fmap on the newtype, and unwrap. In your case:

import Data.Functor.Compose

let z = getCompose . fmap (:[]) . Compose $ text


We are composing the ((-&gt;) s) and Scraper a functors.

The problem with this is that it trades newtype noise for nested fmap noise.