相关疑难解决方法(0)

关于learnyouahaskell.com的"Kinds and some type-foo"部分中的段落的困惑

我是一个Haskell noob,他正在通过精彩的"了解你为伟大的好人的哈斯克尔"而努力.这个问题与第8章"Kinds and some type-foo"一节中的段落有关.该段落如下:

"让Frank成为豆腐的一个例子很简单.我们看到豆腐需要一个ja(所以这种形式的一个例子就是Maybe Int)并返回一个taj.所以如果我们用j替换Frank,结果类型将是Frank也许吧."

这让我有点糊涂了.在我看来,最后一句应该是:

"因此,如果我们用Frank替换t,结果类型将是Frank Int Maybe."

关于我出错的地方的任何解释都将非常感激.

haskell

15
推荐指数
1
解决办法
278
查看次数

Haskell中提升和未提升的产品类型是什么?

我最近最近遇到了"提升产品类型"一词,与未提升产品类型形成鲜明对比.

我不记得上下文,但我发现Stack Overflow还有其他问题,询问未提升产品类型的缺点(例子).

我或多或少知道什么是产品类型.它类似于(a, b)Foo a b c大致对应于集合论中的笛卡尔积.

在这种情况下,"解除"和"解除"这两个词的含义是什么?

haskell types

12
推荐指数
2
解决办法
1027
查看次数

Haskell类型的功能?

考虑这个ADT:

data Property f a = Property String (f a) | Zilch
  deriving Show
Run Code Online (Sandbox Code Playgroud)

这是什么f?它是一个功能a吗?它是'类型函数'吗?教练说Haskell有一个图灵完整类型的语言......所以在这种情况下,类型也可以具有函数我假设?

*Main> var = Property "Colors" [1,2,3,4]
*Main> :t var
var :: Num a => Property [] a
Run Code Online (Sandbox Code Playgroud)

怎么f[]在这里?既然[]是空列表的构造函数,那么它f总是将成为a以下示例中类型的最外面的空构造函数?

*Main> var = Property "Colors" [(1,"Red"),(2,"Blue")]
*Main> :t var
var :: Num t => Property [] (t, [Char])

*Main> var = Property "Colors" (1,"Red")
*Main> :t var
var :: Num t => Property …
Run Code Online (Sandbox Code Playgroud)

haskell types

7
推荐指数
2
解决办法
2006
查看次数

函数中的各种类型

请使用以下代码:

{-# LANGUAGE KindSignatures, DataKinds #-}

data Nat = O | S Nat

class NatToInt (n :: Nat) where
    natToInt :: n -> Int

instance NatToInt O where
    natToInt _ = 0

instance (NatToInt n) => NatToInt (S n) where
    natToInt _ = 1 + natToInt (undefined :: n)
Run Code Online (Sandbox Code Playgroud)

GHC告诉我们它期望OpenKind在类型规范中natToInt而不是a Nat,因此拒绝编译.这可以通过某种铸造来解决:

data NatToOpen :: Nat -> *
Run Code Online (Sandbox Code Playgroud)

然后更换nNatToOpen n在t时的natToInt-s.

问题1:有没有办法*在不使用类型级包装器的情况下指定除任何函数之外的其他类型?

问题2:在我看来,非类函数将很乐意使用任何类型的类型,例如:

foo :: (a :: *) -> …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
1
解决办法
187
查看次数

理解Haskell类的种类

看一下Learn You a Haskell的一个kind例子:

data Frank a b = Frank {frankField :: b a} deriving (Show)

LYAH讨论:

我们看到弗兰克有一种* - >(* - >*) - >*第一个*代表a而(* - >*)代表b.

当我想到一个例子时,这对我来说很有意义:Frank String Maybe = Frank {frankField :: Maybe String}.

但我对如何思考kind右手方面感到困惑

... = Frank {frankField :: b a}.

由于返回类型frankField :: b a,怎么能kindFrank为:

* -> (* -> *) -> * -- what does the right-most * represent?

为什么右手边kind等于* …

haskell

5
推荐指数
2
解决办法
204
查看次数

对a - > b`函数类型的限制

假设我有一个函数签名的一部分:

f :: (a -> b) -> ...

kinds对于ab?的类型是否有任何限制(例如他们的)?

a不能是一个功能,即(c -> d)可以吗?

haskell

2
推荐指数
1
解决办法
65
查看次数

什么意思在Haskell中输入`a - > mb`?

示例 - runKleisli来自Haskell基本模块的函数

newtype Kleisli m a b = Kleisli { runKleisli :: a -> m b }
Run Code Online (Sandbox Code Playgroud)

这意味着runKleisli有1个参数类型a,必须返回函数m,它有1个参数b

haskell

0
推荐指数
1
解决办法
107
查看次数

标签 统计

haskell ×7

types ×2