Это глупое ограничение, которое было введено до того, как стало понятно, насколько сложно реализовать классы типов. Оказывается, его достаточно просто поддерживать, поэтому есть языковое расширение, упомянутое в ошибке, которое позволяет вам так говорить. Вы можете включить его, добавив
{-# LANGUAGE FlexibleContexts #-}
в начало вашего файла, и с расширением этот файл считается полностью безопасным. Тем не менее, в этом случае вам не следует включать его, а вместо этого следует просто написать
instance (Arbitrary a, Arbitrary b) => Arbitrary (AccumulateRight a b)
- в конце концов, (Arbitrary a, Arbitrary b)
- это как раз те условия, при которых выполняется Arbitrary (Validation a b)
.