X -- монада (как у тебя), ты можешь от List[Free[F, X[List[B]]]] всегда перейти к X[List[Free[F, X[List[B]]]]] ( pure, point ), после чего (если обозначить Y[T] = X[List[T]] ) тебе нужно перейти от Y[Free[F, Y[T]]] к Free[F, Y[T]], что кажется, уже естественным переходом ( roll ?)
из этого поста выйдет отличное пугало для желающих изучать скалу
Обсуждают сегодня