<p><pre><code>    newtype HeadList a = HeadList { getHeadList :: [a] }

    instance Monad HeadList where 
         return a = HeadList [a]
         m &gt;&gt;= f = HeadList $ fmap (head . getHeadList . f) (getHeadList m) 
</code></pre>
This is a list instance that only keeps the head of function result, so it&#x27;s basically just a map.<p>But you could imagine putting any function that returns one result. min max avg normalize, etc