如何在本地安装 Haskell Stack?

2023-12-24

我正在学校服务器上工作,我需要安装 Haskell 的堆栈。在里面README https://github.com/commercialhaskell/stack/blob/master/README.md文件并在website https://docs.haskellstack.org/en/stable/faq/我找不到如何本地安装。如果我不是 sudo 用户,我该怎么办?


您不需要超级用户权限来安装堆栈;您也可以将其安装在您自己的主目录中。要实现此功能,您所需要的只是一个 Linux 系统GMP https://gmplib.org/已安装(GHC 在非常基础的层面上依赖于此)。如果未安装 GMP,管理员实际上不应该担心安装它。 (或者,按照这些说明 https://unix.stackexchange.com/questions/265239/how-to-install-a-custom-gmp-lib-for-just-one-user无需 root 权限即可安装 GMP。)

#!/bin/bash

# Stack installation script, adapted from:
# https://github.com/yantonov/install-ghc/blob/af0b968b9e8423efb152ccec4224821e29317710/ubuntu/install-ghc-ubuntu.md

DOWNLOADS_DIR=$HOME/Downloads
STACK_INSTALL_DIR="$HOME/Development/bin"
mkdir -p ${STACK_INSTALL_DIR}
STACK_VERSION="2.1.3"  
STACK_ARCHITECTURE="x86_64"  
STACK_PLATFORM="linux"  

# Check that libgmp is installed. This is the main critical system-level
# dependency of the Haskell environment that may not be present.

function check_lib()
{
    echo "int main(){}" | gcc -o /dev/null -lgmp -x c -
    return $?
}

GMP_OK=false
if (ldconfig -p | grep -q "libgmp.so.10"); then
    GMP_VERSION_POSTFIX=""
    if (check_lib -lgmp); then GMP_OK=true; fi
elif (ldconfig -p | grep -q "libgmpxx.so.4"); then
    GMP_VERSION_POSTFIX="-gmp4"
    if (check_lib -lgmp); then GMP_OK=true; fi
fi


if [ $GMP_OK = false ]; then
    echo >&2 "Haskell requires the GNU multi-precision library (with headers)"
    echo >&2 "in version 4 or 10, but neither can be found. Try"
    echo >&2
    echo >&2 "$ sudo apt-get install libgmp-dev"
    echo >&2
    echo >&2 "or https://unix.stackexchange.com/questions/265239/how-to-install-a-custom-gmp-lib-for-just-one-user"
    echo >&2
    exit 1
fi

STACK_DIST_FILENAME="stack-$STACK_VERSION-$STACK_PLATFORM-$STACK_ARCHITECTURE.tar.gz"  
STACK_DIST_UNZIPPED_DIR="stack-$STACK_VERSION-$STACK_PLATFORM-$STACK_ARCHITECTURE"
STACK_DIST_URL="https://www.stackage.org/stack/$STACK_PLATFORM-$STACK_ARCHITECTURE"
STACK_TARGET_DIR="stack-$STACK_VERSION"

cd $DOWNLOADS_DIR

curl -L -o $STACK_DIST_FILENAME $STACK_DIST_URL  
tar xvfz $STACK_DIST_FILENAME

# in case if error like this: 
#curl: (77) error setting certificate verify locations: CAfile: 
# /etc/pki/tls/certs/ca-bundle.crt CApath: 
# ...
# create ~/.curlrc file
# and put this lines to it
# capath=/etc/ssl/certs/
# cacert=/etc/ssl/certs/ca-certificates.crt

# move to home development dir  
rm -rf $STACK_INSTALL_DIR/$STACK_TARGET_DIR  
mv $STACK_DIST_UNZIPPED_DIR $STACK_INSTALL_DIR/$STACK_TARGET_DIR

cd $STACK_INSTALL_DIR  

# sym link
rm -rvi stack  
ln -s `pwd`/$STACK_TARGET_DIR stack  

# add to PATH environment  
STACK_HOME=$HOME/Development/bin/stack  
PATH=$STACK_HOME:$PATH

# clean up
cd $DOWNLOADS_DIR
rm -rf stack-$STACK_VERSION*

# install ghc
stack setup
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在本地安装 Haskell Stack? 的相关文章

随机推荐

  • 如何在docker容器内调用api端点?

    我的行动端点通常是http localhost 50000 Method egFunction http localhost 50000 Method egFunction但是当我在 docker 容器上运行应用程序时 我无法调用 api
  • 对象数组上的 Javascript indexOf

    如果我有一个像这样的数组 var myArray color red name redName color blue name blueName color green name greenName
  • WPF 内容控件样式

    如何将样式应用于内容控件的内容 例如
  • NSURLSession 生命周期和基本授权

    如果我使用下面的代码 我无法一致地读取服务器的响应 Header import
  • 如何:在 .net Framework 2.0 中获取时区

    我正在寻找一种可以获取可用时区的方法 使用 net Framework 3 5 我得到了执行相同操作的方法 但我希望使用 net Framework 2 0 获取它 net Framework 3 5具体代码如下 Dim timeZones
  • argparse 子解析器整体帮助输出

    我的 argparse 在顶层只有 3 个标志 store true 其他所有内容都通过子解析器处理 当我跑步时myprog py help 输出像平常一样显示所有子命令的列表 sub1 sub2 sub3 sub4 所以 默认设置效果很好
  • 意图:删除始终/仅一次按钮

    我对 Android 开发还很陌生 打开文件时是否可以删除这两个按钮 始终 仅一次 Intent ACTION GET CONTENT 这是我当前的代码 Intent intent new Intent Intent ACTION GET
  • 使用 pyinstaller 编译时“例外”期间的 mysql.connector 错误?

    我有一个 python 程序 它可以调用 mysql 我使用 pyinstaller 将其构建到 exe 中 使用 pyinstaller 进行 onefile 或 onedir 编译时会出现以下问题 我已经能够使用 mysqldb 或 m
  • 授予创建任何触发器与授予创建触发器

    在 Oracle 中 您可以授予系统权限 例如 GRANT CREATE TRIGGER TO MY USER 但您也可以通过这种方式授予权限 GRANT CREATE ANY TRIGGER TO MY USER 由于系统权限是系统范围的
  • 无论我做什么,如何使用错误的 .ssh 目录修复 Cygwin?

    在我的 Cygwin 机器上 HOME is cygwdrive c Users me 即不是有时默认的 home me 我很欣赏 但是 当我使用 git 并尝试使用 ssh 密钥时 它总是签入 home me ssh为了我的钥匙 为了解决
  • 如何使用解析器 gem 提取我想要的代码片段?

    我只是偶然发现这个解析器宝石 https github com whitequark parser 我想做的是从长文件中提取特定的方法 一个例子是这样的has manyRails 的方法 def has many name scope ni
  • Python:将 Base64 编码为基本连接到 API

    我正在尝试连接到 API 并且必须对用户名和密码进行编码 64 授权 值应如下所示 Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ 当我尝试连接时 出现错误 未经授权 凭据错误 支持人员说我的凭据没问题 但他们解决我的问题
  • 华氏度到摄氏度的转换仅产生 0.0 和 -0.0

    我正在阅读 Java 方法书的第 8 章 方法 构造函数和字段 但我的一个练习遇到了问题 提供的代码是Temperature java import java awt import java awt event import javax s
  • closeAllDocumentsWithDelegate 的正确参数

    我正在编写一个应用程序 需要在一个窗口中包含多个文档 正如所询问的那样here https stackoverflow com questions 1116886 multiple documents in a single window
  • eBay API - 检查Finding API调用计数?

    感谢该页面 https go developer ebay com api call limits https go developer ebay com api call limits我们知道 eBay 允许每个 eBay 开发者帐户每天
  • 如何编写涉及间接继承的Checkstyle自定义检查?

    我们需要编写一个 checkstyle 自定义检查来验证直接或间接继承自某个类 A 的类的特定条件 是否可以使用 checkstyle API 来识别间接继承 例如 假设我们有 C类 扩展 gt B类 B类 扩展 gt A类 在这种情况下
  • 指向结构成员的指针[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 手机是否仅使用 GPS 来获取其位置?

    我正在进行测试 我们正在比较 Android 手机和 GPS 设备的 GPS 位置 我们希望将其集成到我们的硬件中 但为了使测试准确 手机只需要使用 GPS 而不是手机信号塔和 WiFi 这是代码 我在其中设置手机使用哪种服务 Locati
  • 仅当调试器运行时防伪令牌异常

    我有一个 mvc2 应用程序 它通过 iframe 提供内容 iframed 页面只是一个表单 它有一个请求验证令牌 在开发人员使用 Visual Studio 2005 调试器之前 一切都可以跨域正常运行 一旦他们这样做 我就会收到以下错
  • 如何在本地安装 Haskell Stack?

    我正在学校服务器上工作 我需要安装 Haskell 的堆栈 在里面README https github com commercialhaskell stack blob master README md文件并在website https