
boblettoj
newStdGen results in IO Ints whereas i need normal Ints and it seems theres no easy way to convert them without a lot more knowledge of haskell. I have tried using a where clause instead of using do but this is giving me the occurs check error again!
--function used to shuffle cards --list equals random member of array plus the rest of the array --i is randomly generated from range of length equal to that of cards. shuffle :: Int -> [a] -> [a] shuffle i [] = [] shuffle i cards = [(cards!!i) : shuffle (fst pair) (delete (cards!!i) cards)] ^ ^
You are trying to do a one element list of list of card. so, the result of this line should be a [[b]] = [a] => a = [b]. Inside this list, we cons (cards !! i (type b) with shuffle (type [a] = [[b]]). problem : we try to conssomething of type b with something of type [a] = [[b]], but ghci> :t (:) (:) :: a -> [a] -> [a] so b should be [b]. And so on. Just remove the brackets.
where pair = randomR (0, 51) (mkStdGen 42)
It makes me remember jokes : - http://xkcd.com/221/ - http://www.random.org/analysis/dilbert.jpg
and the error: cards.hs:30:0: Occurs check: cannot construct the infinite type: a = [a] When generalising the type(s) for `shuffle' Failed, modules loaded: none.
hmmm...
-- Guillaume Pinot http://www.irccyn.ec-nantes.fr/~pinot/ « Les grandes personnes ne comprennent jamais rien toutes seules, et c'est fatigant, pour les enfants, de toujours leur donner des explications... » -- Antoine de Saint-Exupéry, Le Petit Prince () ASCII ribbon campaign -- Against HTML e-mail /\ http://www.asciiribbon.org -- Against proprietary attachments