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 <[EMAIL PROTECTED]>,
 Martin Sulzmann <[EMAIL PROTECTED]> 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"


_______________________________________________ Haskell mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell

Reply via email to