
u.stenzel:
J. Garrett Morris wrote:
On 2/4/07, Udo Stenzel
wrote: exists s wmap = isJust $ Map.lookup (sort s) wmap >>= find (== s) . snd
If you're going to write it all on one line, I prefer to keep things going the same direction:
Hey, doing it this way saved me a full two keystrokes!!!1
Sure, you're right, everything flowing in the same direction is usually nicer, and in central Europe, that order is from the left to the right. What a shame that the Haskell gods chose to give the arguments to (.) and ($) the wrong order!
exists s wmap = isJust $ find (==s) . snd =<< Map.lookup (sort s) wmap
Normally, from there I would be tempted to look for a points-free implementation, but in this case I have a strong suspicion that would simply be unreadable.
Well, depends on whether we are allowed to define new combinators. I sometimes use
-- Kleisli composition infixl 1 @@ (@@) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c) f @@ g = join . liftM g . f
By the way, this is now in Control.Monad (in darcs). Though since we also want the flipped version, it becomes: -- | Left-to-right Kleisli composition of monads. (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c) f >=> g = \x -> f x >>= g -- | Right-to-left Kleisli composition of monads. '(>=>)', with the arguments flipped (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c) (<=<) = flip (>=>) Cheers, Don