如何仅将任一参数的一侧作为参数传递给Haskell

问题描述

我的其中一个函数返回了其中一个:

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 (将#修改为@)