Evan Martin (evan) wrote in evan_tech,
Evan Martin
evan
evan_tech

another monad to become familiar with

A guy at work who's ten times the Haskell hacker I'll ever be pointed me at this thread, where someone is wondering whether a pattern of applying multiple functions to the same value can be generalized. As an example they provide:
eval :: (b->c->d) -> (a->b) -> (a->c) -> (a->d)
eval f g1 g2 a = f (g1 a) (g2 a)

which could be used to e.g. apply something to both halves of a pair in one go:
(eval (==) fst snd) somePair
This seems obscure enough to me, but the response they get, on a simpler implementation, is done in a single word.

The answer? eval = liftM2, because there's some instance for functions themselves: ((->) a) is an instance of MonadReader, which I don't yet fully get. I need to learn how functional dependencies work first, I think.
Tags: haskell
Subscribe

  • fonts on linux

    I wrote a document on how to diagnose font problems on Linux. I would appreciate feedback, corrections, other common misconfigurations, etc.

  • socks5 proxying flash via ssh

    Suppose you're in Germany and want to watch some Flash-based videos that are IP-limited to the US for whatever reason. At first you'd think you could…

  • chromium.el

    This weekend I wrote some Emacs Lisp to write some utility functions I find useful for hacking on Chromium. It's fun to have a reason to use Lisp!…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments