【问题标题】:REPL error when modifying record arguments修改记录参数时出现 REPL 错误
【发布时间】:2020-02-04 04:19:55
【问题描述】:

考虑shell :: String -> CreateProcess。例如:

Prelude System.IO System.Process> shell "pwd"
CreateProcess {cmdspec = ShellCommand "pwd", cwd = Nothing, env = Nothing, std_in = Inherit, std_out = Inherit, std_err = Inherit, close_fds = False, create_group = False, delegate_ctlc = False, detach_console = False, create_new_console = False, new_session = False, child_group = Nothing, child_user = Nothing, use_process_jobs = False}

我正在尝试修改 CreateProcess 的记录参数,但出现 REPL 错误:

Prelude System.IO System.Process> shell "pwd" { cwd = "/home" }

<interactive>:7:7: error:
    • Couldn't match type ‘CreateProcess’ with ‘[Char]’
      Expected type: String
        Actual type: CreateProcess
    • In the first argument of ‘shell’, namely ‘"pwd" {cwd = "/home"}’
      In the expression: shell "pwd" {cwd = "/home"}
      In an equation for ‘it’: it = shell "pwd" {cwd = "/home"}

<interactive>:7:21: error:
    • Couldn't match expected type ‘Maybe FilePath’
                  with actual type ‘[Char]’
    • In the ‘cwd’ field of a record
      In the first argument of ‘shell’, namely ‘"pwd" {cwd = "/home"}’
      In the expression: shell "pwd" {cwd = "/home"}

【问题讨论】:

    标签: shell haskell record read-eval-print-loop


    【解决方案1】:

    您的代码中有两个问题。

    1. cwd 的类型为 Maybe String,而不仅仅是 String,您需要显式使用 Just 构造函数。
    2. 默认情况下{} 附加到最近的参数,在这种情况下,这是"cwd" 字符串。但是,您要指定函数调用结果的字段。

    这样编写代码对我有用:

    ghci> (shell "cwd") { cwd = Just "/home" }
    CreateProcess 
        { cmdspec = ShellCommand "cwd" 
        , cwd = Just "/home" 
        , env = Nothing
        , std_in = Inherit
        , std_out = Inherit
        , std_err = Inherit
        , close_fds = False
        , create_group = False
        , delegate_ctlc = False
        , detach_console = False
        , create_new_console = False
        , new_session = False
        , child_group = Nothing
        , child_user = Nothing
        , use_process_jobs = False
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2014-02-28
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多