
On Feb 13, 2008 2:41 PM, Jake McArthur
Now we can have NumericLists like [1 :: Int, 5.7 :: Double, 4%5 :: Rational].
No, we can't =). Using data NumericList = forall a . Num a => N [a] *Main> let a = N [1::Int,2,3,4] *Main> let b = N [1::Double,2,3,4] *Main> let c = N [1::Int,2::Double] <interactive>:1:18: Couldn't match expected type `Int' against inferred type `Double' In the expression: 2 :: Double In the first argument of `N', namely `[1 :: Int, 2 :: Double]' In the expression: N [1 :: Int, 2 :: Double] *Main> let d = [a, b, N [1::Rational,2,3,4]] The lists inside N will be homogeneous, but you can have a (homogeneous) list of N's such that each N has a diferrent list type. If you want a list of different types of numbers, you should do something like data Number = forall a. Num a => Number a type NumberList = [Number] x :: NumberList x = [Number (1::Int), Number (2::Double), Number (3::Rational)] or maybe data NumberList2 = forall a . Num a => Cons a NumberList2 | Nil x2 :: NumberList2 x2 = Cons (1::Int) $ Cons (2::Double) $ Cons (3::Rational) Nil Cheers, -- Felipe.