inlineBaseGen :: (Ord c, Ord tc, Ord tv)
  => TcEnv v c tc tv -> Map tc (DataGen c tv m)
  -> Map tc [(Int, DataPat c tc tv)]
inlineBaseGen env g =
  let initState = BaseInlState . flip Map.mapWithKey g $ \ tc _ ->
        let (vs, _) = tyConEnv env Map.! tc
        in (Simple, always (DPLeaf (TcCon tc (length vs) (TcVar <$> vs))))
  in inlineBase env initState
inlineBaseGen :: (Ord c, Ord tc, Ord tv)
  => TcEnv v c tc tv -> Map tc (DataGen c tv m)
  -> Map tc [(Int, DataPat c tc tv)]
inlineBaseGen env g =
  let initState = BaseInlState . flip Map.mapWithKey g $ \ tc _ ->
        let (vs, _) = tyConEnv env Map.! tc
        in (Simple, always (DPLeaf (TcCon tc (length vs) (TcVar <$> vs))))
  in inlineBase env initState
inlineBaseGen env g =
  let initState = BaseInlState . flip Map.mapWithKey g $ \ tc _ ->
        let (vs, _) = tyConEnv env Map.! tc
        in (Simple, always (DPLeaf (TcCon tc (length vs) (TcVar <$> vs))))
  in inlineBase env initState