首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在递归函数中返回不同的类型?(Haskell)

如何在递归函数中返回不同的类型?(Haskell)
EN

Stack Overflow用户
提问于 2018-10-15 06:10:44
回答 3查看 1.1K关注 0票数 1

例如,我需要返回递归函数中的整数或布尔值。

我的问题的一个示例代码:

代码语言:javascript
复制
findInt :: [Int] -> Either Int Bool
findInt (x:xs) =
     if x == 1 then x
     else False : findInt xs

然后,错误表示无法将预期的类型" Int“与实际类型”Int“匹配。但是我想检查这个元素是否在这个列表中,如果它在这个列表中,它将返回这个元素,并告诉我如果它不是通过返回一个布尔值。

EN

Stack Overflow用户

回答已采纳

发布于 2018-10-15 07:04:23

给定的函数没有类型:x :: Int(False : _) :: [Bool],这两种类型不能统一(将::读入“有类型”)。

经过调整,

代码语言:javascript
复制
findInt (x:xs) =
     if x == 1 then Left x
     else Right False : findInt xs

它仍然没有类型:Left x :: Either Int b(Right False : _) :: [Either a Bool],这两种类型也不能统一。

代码语言:javascript
复制
findInt :: [Int] -> Either Int Bool
findInt (x:xs) =
     if x == 1 then Left x
     else findInt xs
findInt [] = Right False

具有一个类型,因为Left x :: Either Int bRight False :: Either a Bool可以统一这两种类型:

代码语言:javascript
复制
        Either Int b
        Either a   Bool
       -----------------      a ~ Int , b ~ Bool
        Either Int Bool

正如类型签名所指定的那样,统一类型确实是Either Int Bool

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52810646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档