2009/5/1 Paul Keir <[email protected]>: > There's nothing better than making a data type an instance of Num. In > particular, fromInteger is a joy. But how about lists? > > For example, if I have > > data Foo a = F [a] > > I can create a fromInteger such as > fromInteger i = F [fromInteger i] > > and then a 19::(Foo Int), could become F [19]. > > Is it possible to do something similar for lists? So could > [1,2,3]::(Foo Int) become something slightly different, say, > > F [1,2,3] > > Paul > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
If you mean what I think you're referring to, you can't. The only reason it works for integer literals is that the compiler replaces occurrences of, say, 19 with (fromInteger 19). There's no function that's automatically applied to list literals, so ([1,2,3] :: Foo Int) isn't able to do anything useful, unfortunately. However, there's an extension in GHC, OverloadedStrings, which lets you use the method fromString of class Data.String.IsString to overload literals. (That's not what you asked, though, I know. :) ) _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
