[Haskell] Re: "Never" GADT Function?

Lennart Augustsson lennart at augustsson.net
Sat Jan 8 05:29:51 EST 2005


Well, this compiles:

data T a where
      BoolT :: T Bool
      IntT :: T Int

neverT' :: T a -> x
neverT' BoolT = error "Bool"
neverT' IntT = error "Int"

neverT :: T Char -> x
neverT = neverT'

But it uses error for the unreachable cases, maybe not what you want.

	-- Lennart

Ashley Yakeley wrote:
> In article <16863.36246.132716.788213 at sf0.comp.nus.edu.sg>,
>  Martin Sulzmann <sulzmann at comp.nus.edu.sg> wrote:
> 
> You should be able to even write
> 
> neverT (BoolT x) = x
> neverT (IntT x) = False
> 
> Actually I didn't put in any arguments to my constructors. Apart from 
> that I agree: this should compile, but doesn't:
> 
>   data T a where
>      BoolT :: T Bool
>      IntT :: T Int
> 
>   neverT :: T Char -> x
>   neverT BoolT = "hello"
>   neverT IntT = 37
> 
> Pick.hs:11:9:
>     Inaccessible case alternative: Can't match types `Bool' and `Char'
>     When checking the pattern: BoolT
>     In the definition of `neverT': neverT BoolT = "hello"
> 



More information about the Haskell mailing list