
(guess who finally decided to learn about imp params :P) this looks like a bug to me, but of course i may be wrong. consider these definitions:
data BLSupply = BLSupply [Bool]
instance Splittable BLSupply where split (BLSupply l) = (BLSupply (True:l), BLSupply (False:l))
newBL (BLSupply bl) = bl
basically we can name things by lists of bools we name lists using this function:
number :: (%ns :: BLSupply) => [a] -> [(a,[Bool])] number [] = [] number (x:xs) = (x,n) : number xs where n = newBL %ns
which works fine. in ghci: *ImpParam> let %ns = BLSupply [] in number "hello" [('h',[False]),('e',[False,True]),('l',[False,True,True]),('l',[False,True,True,True]),('o',[False,True,True,True,True])] Whee. now here's the wierd thing. suppose we remove the type signature from the number function. then, in ghci: *ImpParam> :t number forall a. (%ns :: BLSupply) => [a] -> [(a, [Bool])] *ImpParam> let %ns = BLSupply [] in number "hello" [('h',[]),('e',[]),('l',[]),('l',[]),('o',[])] what gives? why did it suddenly break even though it gets the type right? - hal -- Hal Daume III "Computer science is no more about computers | hdaume@isi.edu than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume