feasibleNormalArrangements :: ConstraintMap a -> [Arrangement a]
feasibleNormalArrangements = filter validArrangement . sequenceA
  where
    validArrangement = nodupes . elems
    nodupes []     = True
    nodupes (y:ys) = notElem y ys
                  && nodupes ys
feasibleNormalArrangements :: ConstraintMap a -> [Arrangement a]
feasibleNormalArrangements = filter validArrangement . sequenceA
  where
    validArrangement = nodupes . elems
    nodupes []     = True
    nodupes (y:ys) = notElem y ys
                  && nodupes ys
feasibleNormalArrangements = filter validArrangement . sequenceA
  where
    validArrangement = nodupes . elems
    nodupes []     = True
    nodupes (y:ys) = notElem y ys
                  && nodupes ys