http://www.michaelburge.us/2017/09/27/delta-debugging-in-haskell.html
data HList f xs where
HNil :: HList f '[]
HCons :: f a -> HList f as -> HList f (a ': as)
divideGeneral :: forall f a bs. Divisible f => (a -> HList Identity bs) -> (HList f bs -> f a)
divideGeneral f = \case
HNil ->