Re: [Haskell-cafe] Polymorphic QuickCheck arguments

2008-06-17 Thread Hugo Pacheco
You are right!
If I try to compile it, then it complains about a Show instance for a, what
in fact forces a monomorphic type signature for t.

I have found under Test.Quickcheck.Poly a way to generate Int values for a
polymorphic type, but because it  requires an abstraction Poly a for some
type a I do not see how it can improve.

What it concretely states the module is

- This is the basic pseudo-polymorphic object.

- The idea is you can't cheat, and use the integer

- directly, but need to use the abstraction.

Is it possible to cheat? I would like to...

Thanks,

hugo


On Tue, Jun 17, 2008 at 12:17 PM, Sebastiaan Visser <[EMAIL PROTECTED]>
wrote:

> On Jun 17, 2008, at 11:53 AM, Hugo Pacheco wrote:
>
>> Hi all,
>>
>> There is something about polymorphic tests in QuickCheck that I do not
>> understand.
>>
>> If you write the simplest dummy test function
>>
>> tst :: a -> Bool
>> tst _ = True
>>
>> and evaluate it we get
>>
>> > verboseCheck tst
>> 0:
>> ()
>> 1:
>> ()
>> ...
>>
>
>
>  How come did the polymorphic value a get instanciated to ()? Is this done
>> via the Testable type class?
>> Could someone please explain this to me? I'm not saying it does not make
>> sense, but I would like to understand how it works. Being possible to change
>> this behavior, this is, assign another "default type" whenever polymorphic
>> types occur, would be awesome.
>>
>
> I think it is GHCi that is instantiating the type with (). Try compiling
> the program, it will probably be rejected by the compiler when you do not
> specify a concrete type.
>
> You can, for example, try this:
>
> verboseCheck (tst :: [Int] -> Bool)
>
>  Cheers,
>> hugo
>>
>


-- 
www.di.uminho.pt/~hpacheco
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Polymorphic QuickCheck arguments

2008-06-17 Thread Sebastiaan Visser

On Jun 17, 2008, at 11:53 AM, Hugo Pacheco wrote:

Hi all,

There is something about polymorphic tests in QuickCheck that I do  
not understand.


If you write the simplest dummy test function

tst :: a -> Bool
tst _ = True

and evaluate it we get

> verboseCheck tst
0:
()
1:
()
...



How come did the polymorphic value a get instanciated to ()? Is  
this done via the Testable type class?
Could someone please explain this to me? I'm not saying it does not  
make sense, but I would like to understand how it works. Being  
possible to change this behavior, this is, assign another "default  
type" whenever polymorphic types occur, would be awesome.


I think it is GHCi that is instantiating the type with (). Try  
compiling the program, it will probably be rejected by the compiler  
when you do not specify a concrete type.


You can, for example, try this:

verboseCheck (tst :: [Int] -> Bool)


Cheers,
hugo

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


Re: [Haskell-cafe] Polymorphic QuickCheck arguments

2008-06-17 Thread Hugo Pacheco
It does not seem like printing the result value from IO (), because with a
more complicated example for lists.
t :: [a] -> Bool
t x = True

then it randomly generates values of type [()].

*Quick> verboseCheck t
0:
[]
1:
[()]
2:
[(),(),()]
3:
[]
4:
[()]
5:
[(),(),(),()]

I just wonder how the a got instantiated to ().

Thanks,
hugo


On Tue, Jun 17, 2008 at 11:05 AM, Dougal Stanton <[EMAIL PROTECTED]>
wrote:

> 2008/6/17 Hugo Pacheco <[EMAIL PROTECTED]>:
> > Hi all,
> > There is something about polymorphic tests in QuickCheck that I do not
> > understand.
> > If you write the simplest dummy test function
> > tst :: a -> Bool
> > tst _ = True
> > and evaluate it we get
> >> verboseCheck tst
> > 0:
> > ()
> > 1:
> > ()
> > ...
> > How come did the polymorphic value a get instanciated to ()? Is this done
> > via the Testable type class?
>
> I haven't got something here to check with, but from the formatting it
> looks like every odd line is a randomly-chosen boolean value, and the
> following line is the result? It might be just printing the result
> value of IO (). Maybe try a more complete test to see how that looks?
>
> Cheers,
>
> D
>
>
> --
> Dougal Stanton
> [EMAIL PROTECTED] // http://www.dougalstanton.net
>



-- 
www.di.uminho.pt/~hpacheco
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Polymorphic QuickCheck arguments

2008-06-17 Thread Dougal Stanton
2008/6/17 Hugo Pacheco <[EMAIL PROTECTED]>:
> Hi all,
> There is something about polymorphic tests in QuickCheck that I do not
> understand.
> If you write the simplest dummy test function
> tst :: a -> Bool
> tst _ = True
> and evaluate it we get
>> verboseCheck tst
> 0:
> ()
> 1:
> ()
> ...
> How come did the polymorphic value a get instanciated to ()? Is this done
> via the Testable type class?

I haven't got something here to check with, but from the formatting it
looks like every odd line is a randomly-chosen boolean value, and the
following line is the result? It might be just printing the result
value of IO (). Maybe try a more complete test to see how that looks?

Cheers,

D


-- 
Dougal Stanton
[EMAIL PROTECTED] // http://www.dougalstanton.net
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe