Suppose I have a type describing a statement and that I'm trying to make it an instance of arbitrary. The type looks like this:

data Statement
    = InputDecs [InputDecl]
    | VarDecs [VarDecl]
    | ArrayDecs [ArrayDecl]
    | Compound [Statement]
    | Assign (VarIdent, Expr)
    | ArrayAssign (VarIdent, [Expr], Expr)

Assuming that other types involved were instances of arbitrary, how do I write arbitrary for Statement?

Poking around various bits of source code I think that for a type like the following

data Style
    = StyleValue Expr
    | Solid
    | Dashed
    | Dotted
    | Dashed2
    | Dashed3
    deriving Show

I can write

instance Arbitrary Style where
    arbitrary = oneOf [ StyleValue . arbitrary,
                        elements [ Solid
                                 , Dashed
                                 , Dotted
                                 , Dashed2
                                 , Dashed3
                                 ]
                      ]

I'm not sure if this is correct, though, so any help is appreciated!

        Thanks in advance, Joel

--
http://wagerlabs.com/





_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to