首页 > 解决方案 > 在纯 nix 中使用 http-client/http-client-tls 时堆栈执行失败

问题描述

我正在使用nixstackhttp-client-tls在 Haskell 中从/向 HTTPS 获取/发布数据。

问题是,stack exec project-exec失败了:

project-exe: security: createProcess: runInteractiveProcess: exec: 不存在(没有这样的文件或目录)

但是,如果我pure: false在 stack.yaml 中设置 nix,它可以正常工作。

那么我是否在我的 nix 环境中丢失了一些东西?我该如何解决这个问题?


main.hs:

{-# LANGUAGE OverloadedStrings #-}
--
module Main where
--
import qualified Data.ByteString.Lazy as B
--
import Network.HTTP.Client
import Network.HTTP.Client.TLS
--
url = "https://www.google.com.tw/search?q=test"
--
main :: IO ()
main = do
    mgt <- newManager tlsManagerSettings
    request <- parseRequest url
    res <- httpLbs request mgt :: IO (Response B.ByteString)
    print res

堆栈.yaml:

resolver: lts-14.11

packages:
- .

nix:
  enable: true
  pure: true
  # shell-file: shell.nix
  # packages: [ ]

标签: haskellhaskell-stacknix

解决方案


pure: true意味着排除在“现有”外壳中定义的可执行文件。

所以看起来你可能只需要明确定义你所依赖的包。


推荐阅读