在纯脚本中查找数组中的所有偶数但出现类型不匹配错误
Find all even number in array in purescript but getting type mismatch error
我正在解决一个问题,我必须用纯脚本计算数组中的所有偶数。我已经写下代码,但我面临类型不匹配错误。
import Data.Array (null)
import Data.Array.Partial (tail,head)
import Partial.Unsafe (unsafePartial)
import Math
iseven :: Int -> Boolean
iseven a = mod a 2 == 0
len :: forall a. Array a -> Int
len arr =
if null arr
then 0
else
if iseven unsafePartial head arr
then 1 + len (unsafePartial tail arr)
else len (unsafePartial tail arr)
但是我收到一个错误。
Error found:
in module $PSCI
at :6:18 - 6:40 (line 6, column 18 - line 6, column 40)
Could not match type
a1
with type
Int
while checking that type t0
is at least as general as type Int
while checking that expression (unsafePartial head) arr
has type Int
in binding group len
where a1 is a rigid type variable
bound at (line 0, column 0 - line 0, column 0)
t0 is an unknown type
我是纯脚本的新手,所以我无法理解错误。
当你写 unsafePartial head arr
时,这意味着“将函数 unsafePartial
应用于两个参数,第一个参数 head
和第二个参数 arr
,但这不是你想要的想做。
您要做的是先计算 head arr
,然后才将 unsafePartial
应用于计算结果。
为此,请使用括号:
unsafePartial (head arr)
或 $
运算符:
unsafePartial $ head arr
修复该问题后,您遇到的下一个错误是关于 iseven
期望的参数以及您传递给它的内容。 len
的签名说 forall a. Array a ->
,意思是“我将使用任何类型的数组”,但实际上它试图传递该数组的一个元素到 iseven
,它需要一个 Int
。所以你的函数承诺可以处理任何东西,但实际上想要 Int
.
要修复,让签名说实话:函数需要一个 Int
s 的数组:
len :: Array Int -> Int
我正在解决一个问题,我必须用纯脚本计算数组中的所有偶数。我已经写下代码,但我面临类型不匹配错误。
import Data.Array (null)
import Data.Array.Partial (tail,head)
import Partial.Unsafe (unsafePartial)
import Math
iseven :: Int -> Boolean
iseven a = mod a 2 == 0
len :: forall a. Array a -> Int
len arr =
if null arr
then 0
else
if iseven unsafePartial head arr
then 1 + len (unsafePartial tail arr)
else len (unsafePartial tail arr)
但是我收到一个错误。
Error found:
in module $PSCI
at :6:18 - 6:40 (line 6, column 18 - line 6, column 40)
Could not match type
a1
with type
Int
while checking that type t0
is at least as general as type Int
while checking that expression (unsafePartial head) arr
has type Int
in binding group len
where a1 is a rigid type variable
bound at (line 0, column 0 - line 0, column 0)
t0 is an unknown type
我是纯脚本的新手,所以我无法理解错误。
当你写 unsafePartial head arr
时,这意味着“将函数 unsafePartial
应用于两个参数,第一个参数 head
和第二个参数 arr
,但这不是你想要的想做。
您要做的是先计算 head arr
,然后才将 unsafePartial
应用于计算结果。
为此,请使用括号:
unsafePartial (head arr)
或 $
运算符:
unsafePartial $ head arr
修复该问题后,您遇到的下一个错误是关于 iseven
期望的参数以及您传递给它的内容。 len
的签名说 forall a. Array a ->
,意思是“我将使用任何类型的数组”,但实际上它试图传递该数组的一个元素到 iseven
,它需要一个 Int
。所以你的函数承诺可以处理任何东西,但实际上想要 Int
.
要修复,让签名说实话:函数需要一个 Int
s 的数组:
len :: Array Int -> Int