如何在Mac OS上安装Haskell

47

我尝试在我的Macbook上安装Haskell已经两天了,但一直没有成功。

我做了以下事情:

$ brew install ghc

好的。现在我正在尝试安装

$ cabal install text

并获取下一个错误消息:

Data/Text.hs:1074:4:
     error: invalid preprocessing directive
      #-}
       ^
我已经搜索并找到了 这个

因此:

  • brew install gcc48

$ /usr/local/bin/gcc-4.8 --version  
gcc-4.8 (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cat /usr/local/lib/ghc-7.6.3/settings
  [("GCC extra via C opts", " -fwrapv"),
   ("C compiler command", "/usr/local/bin/gcc-4.8"),
   ("C compiler flags", " -m64 -fno-stack-protector  -m64"),
   ...
  • brew install cabal-install

  • cabal install text

  • 我收到了相同的消息。

    我该怎么修复它们?

    7个回答

    60

    brew install ghc cabal-install

    如果你喜欢使用Homebrew。

    注意:(编辑以添加)Homebrew 可能比Haskell平台下载的OSX版本拥有较旧(或较新)的ghc版本,并且可能存在其他差异。你可以在此处查看发布说明,了解包含在Haskell Platform中的版本以及其他相关信息。 brew info ghc cabal-install 将为您提供有关Homebrew版本的最新信息。

    注意:上次我这样做的时候,我只是按照Filippo的回答中所述安装了haskell-stack。


    brew info 很有帮助! - Bartek Banachewicz
    9
    准备好让你的电脑烧个30-60分钟,因为这个编译需要很长时间。可以参考https://dev59.com/umEh5IYBdhLWcg3wXCZL#29247096,在2分钟内通过安装二进制文件完成。 - sorin

    49

    通过 homebrew 安装 "Haskell Stack" 二进制文件:

    brew install haskell-stack
    

    编辑: 下面是我的原始回答

    If you want to install the Haskell Platform binaries via homebrew:

    brew install cask
    brew cask install haskell-platform
    
    cabal install cabal-install
    

    3
    以下是Haskell.org建议在Mac电脑上安装GHC的方法,与使用Homebrew安装不同。 - Merchako
    截至05/2020: 错误:Cask 'haskell-platform' 不可用:不存在此名称的 Cask。 - Indigenuity
    2
    好的@Indigenuity,时间已经过去了,现在的命令是:brew install haskell-stack。感谢您的提醒,我已经更新了我的答案。 - Filippo Vitale
    现在运行 brew cask install haskell-platform 时会返回“错误:brew cask 不再是 brew 命令。请改用 brew <command> --cask。” - Chebi

    15

    3
    自2022年起,Haskell平台已被弃用,不再是安装Haskell的推荐方式。有关安装Haskell的最新推荐方式,请参阅下载页面。 - saiyancoder
    1
    这个答案不再被接受。 - Bugs Bunny

    14
    以下信息表明可能有一个Mac安装程序可用:

    以下信息表明可能有Mac安装程序可用:

    brew info haskell-platform
    
    We no longer package haskell-platform. Consider installing ghc
    and cabal-install instead:
    
    brew install ghc cabal-install
    
    A binary installer is available:
    https://www.haskell.org/platform/mac.html
    

    4
    现在它展示了三个组件:ghc、cabal-install和haskell-stack。 - rvazquezglez

    8
    2022年,Haskell平台已不再推荐使用,而官方建议的安装方式(包括Mac)是首先安装GHCupGHCup基本上是Haskell工具链(GHC, Stack, Cabal, HLS)的软件包管理器。它可以在主目录中安装每个工具链的多个版本,并将ghc/...命令“设置”(符号链接)到特定的版本。
    要安装GHCup,请使用安装脚本(源代码)。这将安装GHCupGHC,询问有关设置路径等的一些问题,并提示您安装Apple开发人员命令行工具,如果它们尚未安装。
    curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
    

    如果你使用的是 Mac M1 并且想运行 8.10.7 或更早版本的 ghc,你需要安装一个版本在 9 和 12(包括 9 和 12)之间的 llvm,并将其加入到路径中以便 ghc 可以找到。然而目前,9.2.4 是默认版本,它有一个本地代码生成器(NCG),可以直接在 M1 上工作。不过它可能仍然存在一些问题 (详情请见这里),因此考虑升级到 9.4.2 版本,方法为:ghcup install ghc 9.4.2 && ghcup set ghc 9.4.2。当前,9.4.2 版本支持的包相对于 8.10.7 来说还比较少,但是已知问题更少。

    如果你发现自己陷入了安装混乱中,你可以从干净的状态重新安装开发者工具和 GHCup,操作如下:

    sudo rm -rf /Library/Developer/CommandLineTools
    ghcup nuke
    rm -rf ~/.ghcup
    rm -rf ~/.stack
    rm -rf ~/.cabal
    # For the cautious, a reboot here is advised before proceeding
    xcode-select --install
    curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
    

    通过Homebrew也可以安装GHCup,但需要手动更新$PATH并安装/设置所需的工具。

    brew install ghcup
    # Now add $HOME/.ghcup/bin to $PATH
    ghcup install ghc && ghcup set ghc
    

    这是今天的答案,可以节省数小时。ghcup 也会与编辑器/插件等友好地协作,并与 Haskell 语言服务器配合使用,以确保您拥有正确的组件和版本。查看 ghcup list 以了解它为您执行的重要工具管理。但是需要注意的是 - ghcup 的安装和 ghcup 本身都会安装到您的主目录中,因此可能不完全符合您的预期。 - Heath Raftery
    公平地说,这只让我到达了 ghcihls。要使用 ghc,我仍然需要运行 brew install llvm@12,然后将 /opt/homebrew/opt/llvm@12/bin 添加到 PATH 中。即使如此,这仅仅导致成功的编译 - 即使是最简单的“Hello world”程序在编译后执行时仍然会永远挂起,而且 ghcup install 甚至 gcc 编译的可执行文件也会挂起。因此,现在只能将其视为部分解决方案! - Heath Raftery
    啊哈!终于得到了完整的解决方案。简而言之:在 M1 Pro 上,ghc 8.10.7(推荐和默认安装版本)是一条死路。但是9.4.2可以正常工作,而无需诉诸于 llvm 的把戏。我想建议您编辑您的答案@konst,以包含此信息。 - Heath Raftery
    哦,亲爱的。挂起并不完全是与 LLVM 相关的。莫名其妙的是,如果我在网络驱动器上编译和运行 Haskell 程序,它就会挂起。从那时起,任何 ghc/gcc 编译的可执行文件都会挂起,无论是本地还是其他地方,直到重新启动!荒谬,但在我弄清楚发生了什么之前,我在这里报告一下,以供参考。 - Heath Raftery
    1
    终于弥补了过失。现在有信心,ghc 8.10.7在M1上需要llvm,而9.2+则不需要。由于9.2.4现在是默认版本,GHCup可以直接使用。保留了答案中有用的信息并删除了其余部分。 - Heath Raftery

    4

    现在有一个新的ghc-dot-app项目,它是Homebrew公式和Haskell平台官方安装程序的替代品。这是该项目的网页:Haskell for Mac OS X。这是关于它的讨论帖子:Haskell Cafe:“Self-contained GHC for Mac”。以下是作者发布的一段引用:

    它是如何工作的? 在https://github.com/ghcformacosx/ghc-dot-app中,我有一个Main.hs脚本,它下载/构建/等所有先决条件。然后,它修补了shell脚本,使用相对于自身的路径(在跟随符号链接后)而不是硬编码安装位置。它还修补了package.conf.d文件,使其使用${pkgroot}相对路径。 另外,还有一个Xcode项目,其中包含了所有元数据,以使其看起来像真正的Mac应用程序包(图标、Info.plist),以及一个小型Cocoa应用程序,其中包含一个打开文档并提供添加到.bashrc中PATH的说明的按钮。由于Mac OS X手册中的启发式算法,这也将自动使man页面正常工作。

    1
    尝试使用brew install haskell-platform安装Haskell。
    如果您已经在Mavericks上,则需要安装GCC(因为Mavericks附带的是Clang)。请按照此处的说明安装:https://gist.github.com/cartazio/7131371

    是的,这绝对是 homebrew 用户的魔法咒语。 - sanityinc
    5
    很遗憾,自至少2014年9月8日以来,“haskell-platform”不再通过“homebrew”提供支持。详情请参见https://github.com/Homebrew/homebrew/issues/31609。 - nonrectangular
    5
    是的,haskell-platform已从homebrew中移除,但可以在homebrew cask中找到。只需使用brew cask install haskell-platform即可安装。 - Pan Long
    5
    它可能因为某种原因被移除了吗?如果是这样,也许安装经过桶装的版本实际上并不可取。 - mgadda
    5
    安装 GHC、Cabal 和 Haskell Stack,请运行以下命令:brew install ghc cabal-install haskell-stack - james-see

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接