flu*_*oii 4 haskell types existential-type forall data-kinds
在GHCi中,其类型FUN显示如下:
\xce\xbb> :k FUN\nFUN :: forall (n :: Multiplicity) -> * -> * -> *\nRun Code Online (Sandbox Code Playgroud)\n起初,我以为这是一种迂回的表达方式
\nFUN :: Multiplicity -> * -> * -> *\nRun 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 ->因为以下参数(两个隐式RuntimeReps 和两个TYPEs)不依赖于它,但这就是围绕 GHC 原语的奇怪之处。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |