Пожалуйста, объясните синонимы типа - PullRequest
3 голосов
/ 30 августа 2011

Я учусь, поэтому, может быть, это тривиальный вопрос.

В коде, сгенерированном инструментом скаффолдинга yesod, я нашел это выражение:

type YesodPersistBackend PersistTest = SqlPersist

Насколько я понимаю, он создаетпараметризованный тип YesodPersistBackend, имеющий один аргумент типа PersistTest, и это эквивалентно типу SqlPersist.

Это правильно?Если это так, зачем создавать синоним типа с параметрами для типа, который не имеет параметров?

1 Ответ

11 голосов
/ 30 августа 2011

Это не ванильное объявление типа. Если вы видите полный код, он выглядит примерно так -

instance YesodPersist PersistTest where
  type YesodPersistBackend PersistTest = SqlPersist

Это использует расширение для Haskell98, которое называется TypeFamilies. Читайте об этом конкретном синтаксисе здесь - http://www.haskell.org/ghc/docs/latest/html/users_guide/type-families.html#assoc-type-instance

...