[Haskell-cafe] about GADTs on ghci

Yu-Teh Shen shenyute at gmail.com
Tue Nov 27 09:17:48 EST 2007


Thanks.

So GADT provide us to generic type to include all types, is it right?

ex:
data Parser tok a where
    Zero :: Parser tok ()
    One :: Parser tok ()
    Check :: (tok -> Bool) -> Parser tok tok
    Satisfy :: ([tok] -> Bool) -> Parser tok [tok]
    Push :: tok -> Parser tok a -> Parser tok a
    Plus :: Parser tok a -> Parser tok b -> Parser tok (Either a b)
    Times :: Parser tok a -> Parser tok b -> Parser tok (a,b)
    Star :: Parser tok a -> Parser tok [a]

otherwise we need to write something like this (separate the type and
functions):

newtype Parser tok a

zero::Parser tok ()
one :: Parser tok ()
...

On Nov 27, 2007 2:16 PM, Luke Palmer <lrpalmer at gmail.com> wrote:
>
> On Nov 27, 2007 12:57 PM, Yu-Teh Shen <shenyute at gmail.com> wrote:
> > i have seen the documents in
> > http://www.haskell.org/haskellwiki/Generalised_algebraic_datatype
> > but i can not run the following code on ghci
> >
> > ex:
> >
> > data Term x where
> >     K :: Term (a -> b -> a)
> >     S :: Term ((a -> b -> c)  -> (a -> b) -> a -> c)
> >     Const :: a -> Term a
> >     (:@) :: Term (a -> b) -> (Term a) -> Term b
> > infixl 6 :@
> >
> > could any tell me how to run the code?
>
> Put it in a file (eg ski.hs), and run:
>
>   % ghci -fglasgow-exts ski.hs
>
> You cannot enter it directly into ghci; you can't define new data
> types interactively.
>
> You can also put the line
>
> {-# OPTIONS_GHC -fglasgow-exts #-}
>
> At the top, to turn on glasgow extensions whenever GHC compiles this file.
>
> Luke
>


More information about the Haskell-Cafe mailing list