hi,
you can use the reader (environment monad) for this.
combineTest c t1 t2 = liftM2 c t1 t2
lately i have been using 2 combinators to do things like that (thanks to Thomas Hallgren for showing me this):


-- a nicer name for fmap (or liftM if one prefers)
(#) :: Functor f => (a -> b) -> f a -> f b

-- a nicer name for "ap" from Monad.hs
(<#) :: Monad m => m (a -> b) -> m a -> m b

then you can write the above as:
cobineTest c t1 t2   = c # t1 <# t2

i like those two as then you don't need all the liftM? functions.
-iavor




Graham Klyne wrote:

There's a pattern of higher-order function usage I find myself repeatedly wanting to use, exemplified by the following:

[[
-- combineTest :: (Bool->Bool->Bool) -> (a->Bool) -> (a->Bool) -> (a->Bool)
combineTest :: (b->c->d) -> (a->b) -> (a->c) -> a -> d
combineTest c t1 t2 = \a -> c (t1 a) (t2 a)


(.&.) :: (a->Bool) -> (a->Bool) -> (a->Bool)
(.&.) = combineTest (&&)

(.|.) :: (a->Bool) -> (a->Bool) -> (a->Bool)
(.|.) = combineTest (||)

t1 = (>0) .&. (<=4) $ 2         -- True
t2 = (>0) .&. (<=4) $ 5         -- False
t3 = (>0) .&. (<=4) $ 0         -- False
t4 = (>0) .|. (<=4) $ 5         -- True
t5 = (>0) .|. (<=4) $ 0         -- True

tall = and [t1,not t2,not t3,t4,t5]
]]

Looking at the fully-generalized type of 'combineTest', and digging around in SPJ's book on implementation of FP languages, I notice that my combineTest function has the same reduction pattern as the S' combinator used as an optimization of SK combinator compilation.

All this (the recurring requirement, and the fact that S' is a very well-known combinator) leads me to think that maybe there is a version of S' somewhere in the standard Haskell libraries.

If there is, where is it please?

If not, should it be in there somewhere?

#g


------------ Graham Klyne For email: http://www.ninebynine.org/#Contact

_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell


_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to