Haskell-如何强制转换或返回到自定义类型?

Haskell-如何强制转换或返回到自定义类型?,haskell,Haskell,我和GHC还不是朋友。我希望它理解我的返回类型是我的自定义类型 具体来说,我想确保编译器 事实上,我正在返回OAuth2响应。有没有一种惯用的方法来实现这一点 例如: data OAuth2Response = Either OAuth2Error OAuth2AccessToken getAuthorized :: (..) -> (..) -> OAuth2Response getAuthorized = do a <- nonceValidation (Return

我和GHC还不是朋友。我希望它理解我的返回类型是我的自定义类型

具体来说,我想确保编译器 事实上,我正在返回OAuth2响应。有没有一种惯用的方法来实现这一点

例如:

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)