Hacker News new | ask | show | jobs
by DanWaterworth 4573 days ago
With do notation, it becomes:

    do
      n <- name
      let trimmed = trim n
      guard (length trimmed /= 0)
      return (toUpperCase trimmed)
1 comments

Wouldn't it be nice if it was just:

    toUpperCase . guard (\x -> length x /= 0) . trim
I think that is how it would be if it was part of the language.
I like my code to do what it says. You can pretty much do that in Haskell. If you allow me to add a definition first:

    mfilter' :: MonadPlus m => (a -> Bool) -> a -> m a
    mfilter' f = mfilter f . return
Then it's just:

    toUpperCase <=< mfilter' (\x -> length x /= 0) . trim
Which is pretty close. No need to change the language.