flu*_*oii 4 haskell types existential-type forall data-kinds
在GHCi中,其类型FUN
显示如下:
\xce\xbb> :k FUN\nFUN :: forall (n :: Multiplicity) -> * -> * -> *\n
Run Code Online (Sandbox Code Playgroud)\n起初,我以为这是一种迂回的表达方式
\nFUN :: Multiplicity -> * -> * -> *\n
Run Code Online (Sandbox Code Playgroud)\n但事实证明 Template Haskell 对于这种形式有一个单独的构造函数:ForallVisT
。我找不到任何关于它的文档,而且我不知道如何开始以有意义的方式进行实验。
这个语法是什么意思?forall a -> b
与“正常”有什么不同forall a. a -> b
?
forall a -> _
当结果类型依赖于显式参数时使用。
-- type NonDep :: Type -> Type; argument is explicit
data NonDep (x :: Type) :: Type
-- type ImpDep :: forall a. Maybe a -> Type; first argument is implicit and dependent
data ImpDep (x :: Maybe a) :: Type
-- so if you want an explicit and dependent argument...
-- type ExpDep :: forall (a :: Type) -> Maybe a -> Type
data ExpDep (a :: Type) (x :: Maybe a) :: Type
Run Code Online (Sandbox Code Playgroud)
奇怪的是FUN
's 的类型 hasforall (m :: Multiplicity) ->
和 notMultiplicity ->
因为以下参数(两个隐式RuntimeRep
s 和两个TYPE
s)不依赖于它,但这就是围绕 GHC 原语的奇怪之处。
归档时间: |
|
查看次数: |
229 次 |
最近记录: |