考虑以下情况,这是在ScopedTypeVariables上下文中编写的:
defaultGetRestView :: forall view master . ( PersistEntity (PersistentView master view) , PersistStore (YesodPersistBackend master (HandlerT master IO)) , MonadTrans (YesodPersistBackend master), YesodPersist master , PersistMonadBackend (YesodPersistBackend master (HandlerT master IO)) ~ PersistEntityBackend (PersistentView master view) ) => Key (PersistentView master view) -> HandlerT master IO view我遇到了一个我不理解的类型错误。我明确声明我调用的“view”函数是应用于(PersistentView master view)的函数:
defaultGetRestView key = ((runDB $ get404 key) :: HandlerT master IO (PersistentView master view)) >>= (return . (view :: PersistentView master view -> view))
NB: `PersistentView' is a type function, and may not be injective
The type variable `master0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Expected type: PersistentView master view -> view
Actual type: PersistentView master0 view -> view
In the second argument of `(.)', namely
`(view :: PersistentView master view -> view)'