После некоторого расследования я нашел решение. Не используйте оператор SELECT в withTransaction или commit. И не используйте запрос 'для выбора. На мой взгляд, HDBC-mysql использует библиотеку mysqlclient, поэтому вы не можете выполнить новый запрос, когда данные последнего запроса все еще не используются или освобождены. Из-за лени haskell, если вы запустите SELECT в withTransaction, данные не будут использоваться до тех пор, пока ваш код не понадобится, поэтому, когда функция withTransaction вызывает commit, это приведет к ошибке «Command of sync». Для запроса ', возможно, он возвращает количество выбранных строк, но выбранные данные буферизируются библиотекой mysqlclient, так что это проблема.