[Haskell-beginners] Help with TAP implemation in haskell

Brandon S. Allbery KF8NH allbery at ece.cmu.edu
Tue Feb 24 21:42:09 EST 2009


On 2009 Feb 24, at 20:32, Patrick LeBoutillier wrote:
> I'm having problems implementing the equivalent of this function in
> haskell. Inside a do block, is there a way to terminate the function
> immediately and return a result ("return" in the imperative sense, not

Take a look at MonadCont.  But cleaner is to use Maybe (or MaybeT from  
Hackage):

 > -- you don't need to define this, it's in the Prelude
 > instance Monad Maybe where
 >   return         = Just
 >   Nothing  >>= _ = Nothing
 >   (Just x) >>= f = f x

So if a test produces Nothing, you short-circuit past the remaining  
tests in the (>>=)-chain.  But since you need to propagate the TAP  
state even when you are given Nothing, you want to wrap the Maybe in a  
StateT (and since you have IO at the bottom, you need MaybeT from  
Hackage):

 > type TAP a = StateT TAPState (MaybeT IO a)

BTW, are you integrating this with QuickCheck and/or SmallCheck?  It  
might be nice to have

 > withTAPplan myPlan $ do
 >   qTAP propertyOne        -- Test.QuickCheck.quickCheck
 >   sTAP propertyTwo        -- Test.SmallCheck.test
 >   sTAPToDepth 5 property3 -- Test.SmallCheck.smallCheck
 >   -- need wrappers because e.g. quickCheck won't expect a TAPState  
passed in
 >   -- or you could define (>>=) in your monad to DTRT

Also, in Haskell it is preferable to stay pure, perhaps especially  
while testing, so I would ditch the IO in the default case and provide  
a secondary function for tests that require IO.

(hm, I sure hope I got this right, since my sinuses are trying to  
squeeze my brain out my ears...)

-- 
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery at kf8nh.com
system administrator [openafs,heimdal,too many hats] allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university    KF8NH


-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url : http://www.haskell.org/pipermail/beginners/attachments/20090224/3b85e11e/PGP.bin


More information about the Beginners mailing list