+buildLengthPA :: TyCon -> VM CoreExpr
+buildLengthPA repr_tc
+ = do
+ arg <- newLocalVar FSLIT("xs") arg_ty
+ shape <- newLocalVar FSLIT("sel") shape_ty
+ body <- lengthPA (Var shape)
+ return . Lam arg
+ $ Case (Var arg) (mkWildId arg_ty) intPrimTy
+ [(DataAlt repr_dc, shape : map mkWildId repr_tys, body)]
+ where
+ arg_ty = mkTyConApp repr_tc . mkTyVarTys $ tyConTyVars repr_tc
+ [repr_dc] = tyConDataCons repr_tc
+ shape_ty : repr_tys = dataConRepArgTys repr_dc
+