disable typecheck pass

As far as I can tell, this is actually required. The backend kit operates using representation types, which doesn't have enough information to get back to the surface types (which the type checker checks against). In particular, consider the following surface type:

  ((Int,Int), Int)

Now, consider the representation type of this:

  EltRepr Int = ((), Int)
  EltRepr' Int = Int

  EltRepr (a, b) = (EltRepr a, EltRepr' b)
  EltRepr (a, b, c) = (EltRepr (a, b), EltRepr' c)

This means that our input type ((Int,Int), Int) has exactly the same representation type as (Int,Int,Int). This is why even though the Accelerate AST stores information in representation types, it _must_ be parameterised by the surface types.

tl;dr: backend kit's type representation is broken.