gpt4 book ai didi

haskell - 为什么我的(替代!!)函数有这种类型

转载 作者:行者123 更新时间:2023-12-02 20:34:38 26 4
gpt4 key购买 nike

由于某些前奏函数(如!!)给出的错误消息有点沮丧,我尝试编写一个不同的版本。

--(!!!) :: (Show a,Integral b)=> [a]->b->a
as !!! y=f as y
where f (x:xs) b= if b==0
then x
else f xs (b-1)
f [] _= error "!!!: list "++(show as)++" has less than "++show y++" elements"

但是函数类型是

*Handydandy> :type (!!!)
(!!!) :: (Show a, Num a, Eq a) => [[Char]] -> a -> [Char]

我不明白为什么第一个参数被推断为此处的字符串列表,而不仅仅是显示实例的列表。有人能解释一下吗?

最佳答案

最后一行需要一些括号(或 $):

error ("!!!: list "++(show as)++" has less than "++show y++" elements")

现在它被解析为

(error "!!!: list ") ++ (show as) ++ " has less than " ++ show y ++" elements"

这使得 Haskell 认为 (!!!) 返回一个字符串,这意味着它的输入必须是字符串列表。

关于haskell - 为什么我的(替代!!)函数有这种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28172694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com