[Haskell-cafe] using external instance declarations

Kees Bleijenberg k.bleijenberg at lijbrandt.nl
Tue Nov 26 16:06:32 UTC 2013

I have a Building with a field glass: Glass.

I want to use quickcheck. Therefor I wrote a TestGlass.hs with the Arbitrary
instance declaration for Glass. I also want to make Building an instance of
Arbitrary. For the field glass in the Building I need the arbitrary :: Gen
Glass function out of TestGlass.hs.

How do I export and use the instance declarations from TestGlass.hs?



module Glass(



data Glass = Glass Int



module TestGlass()


import Test.QuickCheck

import Test.QuickCheck.Gen

import Glass


instance Arbitrary Glass where

    arbitrary = do

                    n <- choose (1,8) :: Gen Int 

                    return $ Glass n




module Building ()


import Glass

import TestGlass

import Test.QuickCheck

import Test.QuickCheck.Gen


data  Building = Building {

                                glass :: Glass


instance Arbitrary Building where

arbitrary = do 

                g <- arbitrary :: (Gen Glass)

                return Building { glass = g}



When I compile Building I get:


    Ambiguous occurrence `arbitrary'

    It could refer to either `Building.arbitrary',

                             defined at Building.hs:12:1

                          or `Test.QuickCheck.arbitrary',

                             imported from `Test.QuickCheck' at

                             (and originally defined in


It looks like the compiler doesn't look at the instance declarations in the
TestGlass module.

What is wrong in my code?

I want to split the testcode as much as possible from the non-test code and
I don't want to merge the modules Building and Glass (they are both already




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131126/a44e9715/attachment.html>

More information about the Haskell-Cafe mailing list