On Fri, Jul 22, 2011 at 10:31 AM, Stephen Tetley <[email protected]> wrote: > As Haskell is statically typed, if y.length < 100, y is still of type Big...
You could achieve this kind of thing with smart constructors and GADTs. I don't know how useful it is, though =). data Sized t a where Small :: a -> Sized Small a Big :: a -> Sized Big a data Small -- empty data Big -- empty retrieve :: Sized t a -> a retrieve (Small a) = a retrieve (Big a) = a toSmall :: [a] -> Maybe (Sized Small [a]) toSmall xs = if length xs < 100 then Just (Small xs) else Nothing toBig :: ... -- almost the same as toSmall toUnknown :: [a] -> (forall t. Sized t [a] -> r) -> r toUnknown xs f = if length xs < 100 then f (Small xs) else f (Big xs) -- Felipe. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
