我正在学习,这可能是一个微不足道的问题。
在yesod脚手架工具生成的代码中,我找到了这个表达式:
type YesodPersistBackend PersistTest = SqlPersist
我的理解是它创建了一个参数化类型YesodPersistBackend
,它有一个类型参数PersistTest
,这相当于类型SqlPersist
。
这是对的吗?如果是这样,为什么会为没有参数的类型创建一个带有参数的类型同义词?
答案 0 :(得分:11)
这不是一个香草型声明。如果你看到完整的代码,它看起来像这样 -
instance YesodPersist PersistTest where
type YesodPersistBackend PersistTest = SqlPersist
这是使用名为TypeFamilies的Haskell98扩展。请在此处阅读此特定语法 - http://www.haskell.org/ghc/docs/latest/html/users_guide/type-families.html#assoc-type-instance