Thanks. Let me try this. I appreciate all the help. And how do I compute a LR parser graph using haskell?
Sent from my iPhone On Jul 22, 2011, at 6:41 AM, Felipe Almeida Lessa <[email protected]> wrote: > 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 _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
