我在Elm中开始了我的第一个简单的web应用。我的大部分代码目前都是从https://github.com/rtfeldman/elm-spa-example改编的。我正在使用一个在响应头中给我一个authToken的应用程序接口。我有一个应该表示该标记的AuthToken类型。从头文件中取出值并将其转换为error String或AuthToken的结果会造成麻烦。我希望我可以说我正在返回一个AuthToken,返回一个字符串,这将是很好的,因为我的AuthTokens现在只是字符串。看起来好像有一些关于榆树类型的东西我并不理解。
下面是AuthToken的定义
type AuthToken
  = AuthToken String我的方法太复杂了,现在只是尝试做一些类型更改(稍后我也想在这里的body上做一些工作):
authTokenFromHeader : String -> Http.Response String -> Result String AuthToken
authTokenFromHeader name resp =
    let
        header = extractHeader name resp
    in
    case header of
        Ok header ->
            let
                token : Result String AuthToken
                token = Ok (AuthToken header)
            in
            token
        Err error -> Err error我期望这个愉快的案例会返回一个Ok结果,并将响应头中的字符串转换为AuthToken作为它的值。取而代之的是Cannot find variable 'AuthToken'。在文档中,我希望得到一个与类型同名的构造函数。如果我只使用Ok header,编译器会不高兴,因为我返回的是Result String String而不是承诺的Result String AuthToken。
这里的正确方法是什么?
发布于 2018-08-13 18:54:22
代码看起来没有问题。该错误消息指示type AuthToken已在另一个模块中定义,并且未完全导入到定义authTokenFromHeader的模块中。您可以在Elm指南:Modules中阅读有关Elm的模块系统的信息。
假设type AuthToken是在模块Types中定义的,authTokenFromHeader是在模块Net中定义的,一个可能的修复方法是:
Types.elm:
module Types exposing (AuthToken(..))
type AuthToken = AuthToken StringNet.elm:
module Net exposing (authTokenFromHeader)
import Types exposing (AuthToken(..))
authTokenFromHeader : String -> Http.Response String -> Result String AuthToken
authTokenFromHeader name resp =
    ...请注意,使用了AuthToken(..)而不仅仅是AuthToken,这确保了类型以及类型构造函数的导入/导出。
或者只是将type AuthToken的定义移到与authTokenFromHeader的定义相同的文件中。
https://stackoverflow.com/questions/51814144
复制相似问题