问题描述
我的其中一个函数返回了其中一个:
parse :: Int -> String -> Either String JsonLikeValue
另一些将JsonLikeValue
作为参数:
convert :: Int -> JsonLikeValue -> Either InvalidState To
JsonLikeValue
是自定义数据类型:
data JsonLikeValue = JLString String | JLInt Int | JLArray [JsonLikeValue] deriving (Show,Eq)
当我打电话时:
convert num (parse size message)
它给出以下内容:
Couldn't match expected type ‘JsonLikeValue’
with actual type ‘Either String JsonLikeValue’
如何避免这种情况,仅将右侧作为参数传递? 在此先感谢:)
编辑:标记为答案的解决方案非常有帮助,因为它考虑了所有可能的结果,而且由于我不是专家,但看起来仍然更加专业,因此采用该解决方案非常重要看看。
但是足以解决所需的提取是:
extractValue :: Either String JsonLikeValue -> JsonLikeValue
extractValue a = case a of
Left e -> JLArray []
Right r -> r
在Right
的情况下,它仅返回值,在Left
的情况下,它返回所需的数据类型。请注意,这仅在您100%确定该参数将返回Right
值时才有效。否则,请检查下面的答案。
评论中的另一个不错的注意事项是使用fromRight
中的Data.Either
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)