gpt4 book ai didi

haskell - 有没有人编译过避免 Haskell 标准库中的 "not polymorphic enough"定义所需的导入列表?

转载 作者:行者123 更新时间:2023-12-03 11:02:36 25 4
gpt4 key购买 nike

我使用 Haskell 已经有一段时间了。我使用它的次数越多,我就越爱上这种语言。我简直不敢相信我已经用其他语言度过了将近 15 年的生命。

然而,我逐渐厌倦了 Haskell 的标准库。我的主要烦恼是“不够多态”的定义( Prelude.mapControl.Monad.forM_ 等)。我有很多 Haskell 源代码文件,它们的第一行看起来像

{-# LANGUAGE NoMonomorphismRestriction #-}

module Whatever where

import Control.Monad.Error hiding (forM_, mapM_)
import Control.Monad.State hiding (forM_, mapM_)
import Data.Foldable (forM_, mapM_)

{- ... -}

为了避免不断胡扯我应该隐藏哪些定义,我想要一个或少量的源代码文件来包装这个 import样板到可管理的单元。

所以...
  • 有没有其他人尝试过这样做?
  • 如果上一个问题的答案是"is",他们是否发布了生成的样板包装源代码文件?
  • 最佳答案

    它并不像你想象的那么清晰。我将列出我能想到的所有缺点:

    首先,这些功能的通用性没有限制。例如,现在我正在为包含普通类型的索引类型编写一个库。您提到的每个函数都有一个更通用的索引等效项。我希望每个人都切换到我的图书馆吗?不。

    这是另一个例子。 mapM 函数定义了一个满足 Kleisli 范畴中的仿函数定律的高阶仿函数:

    mapM return = return
    mapM (f >=> g) = mapM f >=> mapM g

    所以我可以争辩说你的可遍历泛化是错误的,相反我们应该把它泛化为高阶仿函数类的一个实例。

    此外,请查看 category-extras 包以获取包含所有示例的这些高阶类和函数的一些示例。

    还有性能问题。许多更专业的函数都有非常精细的实现,极大地提高了性能。有时类公开了承认更高性能版本的方法,但有时他们没有。

    还有类型类重载的问题。实际上,我更喜欢尽量减少类型类的使用,除非它们具有从理论而不是方便性得出的合理法则。此外,类型类通常在单态限制方面表现不佳,我喜欢为我的应用程序代码编写没有签名的函数。

    还有口味问题。很多人根本不同意什么是最好的 Haskell 风格。我们仍然无法就前奏达成一致。说到这一点,已经有很多尝试编写新的 Preludes,但没有人能就什么是最好的达成一致,所以我们都默认回到 Haskell98 上。

    但是,我认为改进事物的整体精神是好的,进步的最大敌人是满足感,但不要以为做任何事情都会有明确的正确方法。

    关于haskell - 有没有人编译过避免 Haskell 标准库中的 "not polymorphic enough"定义所需的导入列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076062/

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