Подтвердить что ты не робот

Каковы все соглашения об именах монадов?

Кажется, что Haskell установил несколько соглашений об именах вокруг монад.

Примеры:

  • добавить T в конец, чтобы получить имя трансформатора монады (например, ReaderReaderT)
  • с помощью runXXX для выполнения вычисления монады (например, runST, runReader)
  • liftXXX для различных значений XXX

Существуют ли другие соглашения об именах?

4b9b3361

Ответ 1

  • runX m, где m :: X a будет запускать монаду X и вернуть "побочный эффект" вместе с результатом монады, a.

  • evalX m выполнит вычисление и вернет результат, a.

  • execX m выполнит вычисление и вернет "побочный эффект", но не результат.

  • Подъемники приходят в разные вкусы, которые могут быть слишком сложными для меня, чтобы я хотел объяснить их в ответе SO. Вероятно, вы должны знать lift и liftIO и знать/в конечном итоге искать другие варианты, такие как liftWith и liftBaseWith. См., Например, публикацию EZYang по теме.

  • добавление T после названия монады подразумевает трансформатор. Добавление M после имени функции означает, что оно является монадическим. Добавление _ подразумевает, что результат игнорируется.

  • Все остальные суффиксные буквы означают "использовать hoogle".