Haskell-如何强制转换或返回到自定义类型?
我和GHC还不是朋友。我希望它理解我的返回类型是我的自定义类型 具体来说,我想确保编译器 事实上,我正在返回OAuth2响应。有没有一种惯用的方法来实现这一点 例如:Haskell-如何强制转换或返回到自定义类型?,haskell,Haskell,我和GHC还不是朋友。我希望它理解我的返回类型是我的自定义类型 具体来说,我想确保编译器 事实上,我正在返回OAuth2响应。有没有一种惯用的方法来实现这一点 例如: data OAuth2Response = Either OAuth2Error OAuth2AccessToken getAuthorized :: (..) -> (..) -> OAuth2Response getAuthorized = do a <- nonceValidation (Return
data OAuth2Response = Either OAuth2Error OAuth2AccessToken
getAuthorized :: (..) -> (..) -> OAuth2Response
getAuthorized = do
a <- nonceValidation (Returns Left OAuth2Error or Right "")
b <- getAccessToken (Returns Left OAuth2Error or Right OAuth2AccessToken
b
我认为这个定义和你想象的不一样。特别是,此处的or
不是指序言中定义的or
类型构造函数,而是指定义为本声明一部分的数据构造函数
我想你的意思是
type OAuth2Response = Either OAuth2Error OAuth2AccessToken
ie为您感兴趣的特定
类型定义一个类型同义词。除了Robin Zigmond所写的以外,您还将发现其他问题需要解决,因为b
与您正在使用的do
块中使用的类型不同。解决此问题的一些方法:
“错误”的方法:将b
放回单子
getAuthorized :: (..) -> (..) -> OAuth2Response
getAuthorized _ _ = do
a <- nonceValidation (Returns Left OAuth2Error or Right "")
b <- getAccessToken (Returns Left OAuth2Error or Right OAuth2AccessToken)
return b
type OAuth2Response = Either OAuth2Error OAuth2AccessToken
getAuthorized :: (..) -> (..) -> OAuth2Response
getAuthorized _ _ = do
a <- nonceValidation (Returns Left OAuth2Error or Right "")
b <- getAccessToken (Returns Left OAuth2Error or Right OAuth2AccessToken)
return b
getAuthorized :: (..) -> (..) -> OAuth2Response
getAuthorized _ _ = do
a <- nonceValidation (Returns Left OAuth2Error or Right "")
getAccessToken (Returns Left OAuth2Error or Right OAuth2AccessToken)