3

我正在学习,所以这可能是一个微不足道的问题。

在 yesod 脚手架工具生成的代码中,我发现了这个表达式:

type YesodPersistBackend PersistTest = SqlPersist

我的理解是它创建了一个YesodPersistBackend具有一个类型参数的参数化类型,PersistTest这相当于 type SqlPersist

它是否正确?如果是这样,为什么要为没有参数的类型创建带有参数的类型同义词?

4

1 回答 1

11

这不是一个普通类型的声明。如果你看到完整的代码,它看起来像这样 -

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-in​​stance

于 2011-08-30T13:22:17.990 回答