List 生成列表的函数的类型签名?

List 生成列表的函数的类型签名?,list,haskell,List,Haskell,我的目标是这样做 束3[1,2,3,4,5]=[1,2,3]] 代码告诉了我错误 bundle :: Int -> [a] -> [[a]] bundle 0 _ = [] bundle n (x:xs) = [x:bundle (n-1) xs] Chi写了一些关于这个问题的文章——我从你的例子开始,看看它会把我引向何方 我真的不明白你为什么想要第二次翘曲,但最简单的方法是: Couldn't match expected type ‘[a]’ with actual type

我的目标是这样做

束3[1,2,3,4,5]=[1,2,3]]

代码告诉了我错误

bundle :: Int -> [a] -> [[a]]
bundle 0 _ = []
bundle n (x:xs) = [x:bundle (n-1) xs]

Chi写了一些关于这个问题的文章——我从你的例子开始,看看它会把我引向何方

我真的不明白你为什么想要第二次翘曲,但最简单的方法是:

Couldn't match expected type ‘[a]’ with actual type ‘a’
  ‘a’ is a rigid type variable bound by
      the type signature for bundle :: Int -> [a] -> [[a]]
当然,这将为“bundle 0…”提供[[]],但我认为这确实是您想要的

现在当然有一些更简单的方法-例如,已经有一个函数执行类似的操作:take-它只是没有第二次包装,但这可以通过一个简单的返回来完成:


Chi写了一些关于这个问题的文章——我从你的例子开始,看看它会把我引向何方

我真的不明白你为什么想要第二次翘曲,但最简单的方法是:

Couldn't match expected type ‘[a]’ with actual type ‘a’
  ‘a’ is a rigid type variable bound by
      the type signature for bundle :: Int -> [a] -> [[a]]
当然,这将为“bundle 0…”提供[[]],但我认为这确实是您想要的

现在当然有一些更简单的方法-例如,已经有一个函数执行类似的操作:take-它只是没有第二次包装,但这可以通过一个简单的返回来完成:

捆绑包n-1 xs的类型为[[a]]。要使x:bundle n-1 xs有意义,x必须是[[a]]的元素,因此它必须是[a]。但它只是一个a

换句话说,您正试图构建一个格式错误的列表,例如

bundle :: Int -> [a] -> [[a]]
bundle 0 _ = []
bundle n (x:xs) = [x:bundle (n-1) xs]
你真的想建立一个[[a]]吗?a不是更适合你的目标吗

捆绑包n-1 xs的类型为[[a]]。要使x:bundle n-1 xs有意义,x必须是[[a]]的元素,因此它必须是[a]。但它只是一个a

换句话说,您正试图构建一个格式错误的列表,例如

bundle :: Int -> [a] -> [[a]]
bundle 0 _ = []
bundle n (x:xs) = [x:bundle (n-1) xs]
你真的想建立一个[[a]]吗?[a]不是更适合你的目标吗?

捆绑包3[1,2,3,4,5]=[[1,2,3]]的目的是什么?捆绑包3[1,2,3,4,5]=[[1,2,3]]的目的是什么?为什么一元回归而不仅仅是捆绑包nx=[take nx]?因为我想在这种情况下使用无点版本,我认为边界更具可读性-但这可能是自以为是的,spfrnd也这样做了,因为一元返回,而不仅仅是bundle nx=[take nx]?因为我想在本例中使用无点版本,所以我认为边缘版本更具可读性-但这可能是自以为是的,spfrnd后来也这么做了
[ 1 , [2,3] , [4,5] ]
  ^-- not a list