例如,我需要返回递归函数中的整数或布尔值。
我的问题的一个示例代码:
findInt :: [Int] -> Either Int Bool
findInt (x:xs) =
if x == 1 then x
else False : findInt xs然后,错误表示无法将预期的类型" Int“与实际类型”Int“匹配。但是我想检查这个元素是否在这个列表中,如果它在这个列表中,它将返回这个元素,并告诉我如果它不是通过返回一个布尔值。
发布于 2018-10-15 07:04:23
给定的函数没有类型:x :: Int和(False : _) :: [Bool],这两种类型不能统一(将::读入“有类型”)。
经过调整,
findInt (x:xs) =
if x == 1 then Left x
else Right False : findInt xs它仍然没有类型:Left x :: Either Int b和(Right False : _) :: [Either a Bool],这两种类型也不能统一。
但
findInt :: [Int] -> Either Int Bool
findInt (x:xs) =
if x == 1 then Left x
else findInt xs
findInt [] = Right False具有一个类型,因为Left x :: Either Int b和Right False :: Either a Bool可以统一这两种类型:
Either Int b
Either a Bool
----------------- a ~ Int , b ~ Bool
Either Int Bool正如类型签名所指定的那样,统一类型确实是Either Int Bool。
https://stackoverflow.com/questions/52810646
复制相似问题