在Haskell中,(值级)表达式被归类为类型,可以使用::表示,例如:3 :: Int,"Hello" :: String,(+ 1) :: Num a => a -> a。同样,类型也被归类为种类。在GHCi中,您可以使用命令:kind或:k来检查类型表达式的种类。 >...
什么是约束类型? 在实践中,为什么有人会使用它? 它有什么好处? 能否给出一个简单的代码示例来阐明前两个问题的答案? 举例来说,为什么在这个代码中要使用它?
我很难理解Higher Kind和Higher Rank类型的区别。Kind相当简单(感谢Haskell文献),我曾经认为Rank在讨论类型时类似于Kind,但显然不是这样!我阅读了维基百科文章但没有找到答案。所以有人可以请解释一下什么是等级?什么是Higher Rank?Higher Ran...
我正在使用Data.Typeable,并且特别想能够生成特定种类的正确类型(比如说*)。我遇到的问题是,TypeRep允许我们执行以下操作(在GHC 7.8中使用):let maybeType = typeRep (Proxy :: Proxy Maybe) let maybeCon = fs...
我写了一个新类型Const3,它与Const非常相似,但包含了三个给定类型参数中的第一个:newtype Const3 a b c = Const3 { getConst3 :: a } 我可以为这个新类型定义非常多有用的实例,但我必须全部自己完成。然而,我在类型级别上应用的函数类似于这个函数...
我一直在阅读《学习 Haskell 时希望我知道的事情》这本书,我停在了这个例子上:class Bifunctor p where bimap :: (a -> b) -> (c -> d) -> p a c -> p b d first ::...
如果我检查Maybe的kind,我会得到以下结果: λ> :k Maybe Maybe :: * -> * 现在,如果我检查Monad的类型,我会得到这个结果: λ> :k Monad Monad :: (* -> *) -> Constraint 什...
在Haskell中表达无限类型时: f x = x x -- This doesn't type check 你可以使用newtype来实现: newtype Inf = Inf { runInf :: Inf -> * } f x = x (Inf x) 是否有一种类似于...
多种类型应用是否是单射的? 当我们启用PolyKinds时,我们是否知道f a ~ g b意味着f ~ g和a ~ b? 动机 当试图回答另一个问题时,我将问题简化到只有在启用PolyKinds时才会收到以下错误。 Could not deduce (c1 ~ c) from the ...