获取elm中函数的类型签名

时间:2017-11-12 23:48:50

标签: type-inference elm type-signature

我使用的是榆木0.18。

让我们说我有一个功能,将一堆我赶时间扔在一起的东西串在一起。它有效,但我不确定它的类型签名是什么,我想让榆树告诉我(或暗示我)那种类型的签名。

例如,我使用graphql并且有一个函数,它接受graphql字符串,解码器(也没有类型签名)和Cmd Msg,并通过HttpBuilder运行它。 / p>

graphQLPost graphiql decoder msg =
    HttpBuilder.post (url ++ "api")
        |> HttpBuilder.withStringBody "text/plain" graphiql
        |> HttpBuilder.withExpect (Http.expectJson decoder)
        |> HttpBuilder.send msg

这有效,但我不知道为什么。我尝试使用类型签名graphQLPost : String -> Json.Decode.Decoder -> Cmd Msg进行拟合,但是我收到了错误。

找出这个类型的签名对我来说并不像找到通过榆树诱导它们的方式那么重要。是否有一个命令我可以输入elm-repl或者会告诉我签名的东西?

2 个答案:

答案 0 :(得分:3)

榆树REPL会为你做这件事:

> import Http
> import HttpBuilder
> type Msg = Msg
> url = "..."
"..." : String
> graphQLPost graphiql decoder msg = \
|     HttpBuilder.post (url ++ "api") \
|         |> HttpBuilder.withStringBody "text/plain" graphiql \
|         |> HttpBuilder.withExpect (Http.expectJson decoder) \
|         |> HttpBuilder.send msg
<function>
    : String
      -> Json.Decode.Decoder a
      -> (Result.Result Http.Error a -> msg)
      -> Platform.Cmd.Cmd msg

当您编写一个函数并点击<Enter>时,它会显示签名。在这种情况下,签名是:

graphQLPost : String
      -> Json.Decode.Decoder a
      -> (Result.Result Http.Error a -> msg)
      -> Platform.Cmd.Cmd msg

答案 1 :(得分:2)

使用elm-make选项运行--warn将导致编译器建议您在没有类型注释的函数中包含类型注释,并且它将提供一个用于复制和粘贴的函数

此外,某些编辑器集成(例如Elm的Visual Studio代码语言扩展)将显示这些类型的警告作为提示图标,您可以单击该图标以自动添加缺少的类型注释。您可以为此设置键盘快捷键,而无需双手离开键盘。