# weird (bug?) in linear implicit parameters

**Hal Daume III
**
hdaume@ISI.EDU

*Tue, 23 Jul 2002 10:56:24 -0700 (PDT)*

(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