如何修复我的代码中的错误('无法构造无限类型')以及如何使我的代码工作

0 haskell list

基本上我正在尝试执行一个函数,在这个函数中给出一个列表和一个数字,你必须将列表拆分为与给定数字大小相同的列表,并且所有列表的最后一次拆分的长度都应该低于给定的数字

separa a xs = if length xs >= a then separaM a (drop a xs) ([take a xs]) else [xs]

separaM a xs yss = if length xs >= a then separaM a (drop a xs) (yss : (take a xs)) else separaM a [] (yss : xs)
separaM a [] yss = yss
Run Code Online (Sandbox Code Playgroud)

我希望3"comovais"的输出为["com","ova","is"]但是在我的程序中由于错误而没有输出

ass*_*.jc 6

注意表达式:

yss : (take a xs)
Run Code Online (Sandbox Code Playgroud)

(take a xs)有类型[b],所以yss有类型b.但是当你yss : (take a xs)作为参数传递给separaM函数时,yss预期类型[b]不是b.这就是错误发生的原因.

实际上,您不需要yss存储结果,递归函数可以定义为:

separaM _ [] = []
separaM a xs = (if length xs >= a then (take a xs) else xs) : 
               separaM a (drop a xs)
Run Code Online (Sandbox Code Playgroud)