gpt4 book ai didi

haskell - 我怎么知道我没有完全应用这个 ghc 错误消息中的函数?

转载 作者:行者123 更新时间:2023-12-01 08:37:20 25 4
gpt4 key购买 nike

我从 ghc 收到一条我没有理解的错误消息,并将我的代码简化为:

import System.Process

main = do
(_, out, _) <- readProcessWithExitCode "echo" ["foo"]
putStr out

(我应该给 readProcessWithExitCode 一个额外的参数)。使用 runghc 编译该损坏的程序给出:

Test.hs:4:2:
Couldn't match expected type `IO
(GHC.IO.Exception.ExitCode, String, String)'
against inferred type `(a, b, c)'
In the pattern: (_, out, _)
In a stmt of a 'do' expression:
(_, out, _) <- readProcessWithExitCode "echo" ["foo"]
In the expression:
do { (_, out, _) <- readProcessWithExitCode "echo" ["foo"];
putStr out }

我应该如何从这个 ghc 错误消息中发现我未能完全应用函数?

最佳答案

如果你指定了类型签名main::IO(),那么错误就会变成:

test.hs:5:18:
Couldn't match expected type `IO t0'
with actual type `String
-> IO (GHC.IO.Exception.ExitCode, String, String)'
In the return type of a call of `readProcessWithExitCode'
In a stmt of a 'do' expression:
(_, out, _) <- readProcessWithExitCode "echo" ["foo"]
In the expression:
do { (_, out, _) <- readProcessWithExitCode "echo" ["foo"];
putStr out }

在这种情况下,错误会更加明显。

我的猜测是错误不是很清楚,因为在推断类型时,GHC 认为您在函数中(即 (a->)) monad 而不是 IO,其中万一你之后会应用这个论点。

所以不要偷懒,包括那些类型签名! ;-)

关于haskell - 我怎么知道我没有完全应用这个 ghc 错误消息中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com