我正在学习,所以这可能是一个微不足道的问题。
在 yesod 脚手架工具生成的代码中,我发现了这个表达式:
type YesodPersistBackend PersistTest = SqlPersist
我的理解是它创建了一个YesodPersistBackend
具有一个类型参数的参数化类型,PersistTest
这相当于 type SqlPersist
。
它是否正确?如果是这样,为什么要为没有参数的类型创建带有参数的类型同义词?
我正在学习,所以这可能是一个微不足道的问题。
在 yesod 脚手架工具生成的代码中,我发现了这个表达式:
type YesodPersistBackend PersistTest = SqlPersist
我的理解是它创建了一个YesodPersistBackend
具有一个类型参数的参数化类型,PersistTest
这相当于 type SqlPersist
。
它是否正确?如果是这样,为什么要为没有参数的类型创建带有参数的类型同义词?
这不是一个普通类型的声明。如果你看到完整的代码,它看起来像这样 -
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