Haskell使用ZipList时报Not in scope构造器错误是什么原因
问题解决说明
ZipList类型、其数据构造器及getZipList访问器均定义在Control.Applicative模块,而非你尝试导入的Data.List、Data.Char模块,作用域报错的核心原因为导入模块错误。
操作步骤
- 在GHCi中先执行正确的导入语句:
import Control.Applicative
- 无需手动编写
ZipList的Applicative实例,标准库已经内置了完全符合你写的逻辑的预定义实例,直接运行测试代码即可。 - 运行测试代码验证效果:
getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [100,100,100]
执行后将返回预期结果[101,102,103]。
自定义实现注意事项
如果你希望自己手动实现ZipList而非使用标准库版本,需要先自行声明类型定义,再声明实例,不会出现作用域错误:
newtype ZipList a = ZipList { getZipList :: [a] } instance Applicative ZipList where pure x = ZipList (repeat x) ZipList fs <*> ZipList xs = ZipList (zipWith ($) fs xs)
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

