Search code examples
haskellcategory-theory

How to create an fmap that can take a tuple of functions instead of just a single function?


This could be a way of constructing

Is there a (ideally standard) way of accomplishing

 f :: Int -> Int
 f x = 2*x
 g :: Int -> String
 g x = show x
 h = (f, g)
 fmap h 5 -- results in: (10, "5")

In general, for functions going from A->T_i for some variable types T_i and a fixed type A, I think this would just be a simplification of a BiFunctor, at lease for a 2-tuple of 1-argument functions - it would be great to see a generalization going beyond 2-tuples.


Solution

  • You could use uncurry (&&&), as follows:

    > import Control.Arrow
    > f :: Int->Int ; f x = 2*x
    > g :: Int->String ; g x = show x
    > h = (f, g)
    > uncurry (&&&) h 5
    (10,"5")