Hola, cómo están?
A ver si pueden darme alguna indicación sobre esto.
La única forma con la que logré que compilara es poner
arbitrary = arbitrary
Con esto compila, pero no para cuando hace el test, tengo que pararlo con control c.
Otro problema que tengo es que no parecen estar definidas las funciones liftM. Las defino yo usando como referencia lo visto en clase, pero no corren. El mensaje de error habla de ambigüedad. La ambigüedad surge también con Node, cosa que no me esperaba. Si me esperaba el problema con Empty. Como no tiene parámetro (es Empty nomás, no Empty a, por ejemplo), me confunde para definir la función liftM.
Acá va el mensaje de error (una parte, al menos).
T.hs:43:79:
Could not deduce (Arbitrary a2) arising from a use of ‘arbitrary’
from the context (Arbitrary a)
bound by the instance declaration at T.hs:39:10-42
The type variable ‘a2’ is ambiguous
Note: there are several potential instances:
instance Arbitrary Test.QuickCheck.Random.QCGen
-- Defined in ‘Test.QuickCheck.Arbitrary’
instance Arbitrary a => Arbitrary (Control.Applicative.Const a b)
-- Defined in ‘Test.QuickCheck.Arbitrary’
instance Arbitrary (a b c) =>
Arbitrary (Control.Applicative.WrappedArrow a b c)
-- Defined in ‘Test.QuickCheck.Arbitrary’
...plus 81 others
In the fourth argument of ‘liftM3’, namely ‘arbitrary’
In the expression: liftM3 Node arbitrary arbitrary arbitrary
In the expression: (2, liftM3 Node arbitrary arbitrary arbitrary)
Hice muchas pruebas diferentes, por distintos caminos. Una que se me ocurre es definir una función que cree árboles de cierto tamaño (:: Int->Tree). Pero eso no sería un generador, no sería de tipo Gen.
No es muy clara la pregunta, son muchos temas juntos. Si pudiera consultar personalmente o por zoom podría explicarme mejor.
Gracias por su ayuda,
Julio