gpt4 book ai didi

haskell - 简洁地优先考虑ghci中的非Prelude函数

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

我有以下导入:

{-# LANGUAGE DeriveGeneric,  OverloadedStrings,  DefaultSignatures,  TypeOperators,  FlexibleContexts, RecordWildCards, FlexibleInstances, ExtendedDefaultRules #-}

import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.Text
import GHC.Generics
import Data.DateTime
import Data.Aeson

我尝试使用函数lines来换行,这个函数存在于PreludeData.Text中,我得到以下内容:

$ stack ghci
Prelude> :set -XOverloadedStrings
Prelude> :l mydat.hs
[1 of 1] Compiling Main ( mydat.hs, interpreted )

mydat.hs:39:13: error:
Ambiguous occurrence ‘lines’
It could refer to either ‘Prelude.lines’,
imported from ‘Prelude’ at mydat.hs:1:1
(and originally defined in ‘base-4.11.1.0:Data.OldList’)
or ‘Data.Text.lines’,
imported from ‘Data.Text’ at mydat.hs:7:1-16
|
39 | print $ lines text
| ^^^^^
Failed, no modules loaded.

从错误消息中可以清楚地看出这是失败的,因为 PreludeData.Text.lines 中都存在 lines

我想要的是告诉 ghci 将除 Prelude 之外的/any/函数导入Prelude 中定义的任何函数,尤其是文本。

我认为一种方法是明确地、有选择地隐藏 Prelude.lines:

$ stack ghci
Prelude> :set -XOverloadedStrings -XNoImplicitPrelude
Prelude> import Prelude hiding (lines)
Prelude> :l mydat.hs
[1 of 1] Compiling Main ( mydat.hs, interpreted )

mydat.hs:13:23: error:
Not in scope: type constructor or class ‘Float’
Perhaps you meant ‘UFloat’ (imported from GHC.Generics)

但这似乎不可行:如果我试图只隐藏一个前奏功能,我将失去我真正想要的所有其他功能。

保留 Data.Text 函数并避免它们与 Prelude.* 发生冲突的正确方法是什么?我是否用

卡住名称间距
import Data.Text as T

并使用,例如:

T.lines 

?

如果是这样,那似乎有点麻烦,并且建议制作一个 Prelude 包,该包本质上是 PreludeWithoutPreludeText 加载除此之外的所有其余部分——考虑到 OverloadedStrings 的实用程序。

最佳答案

这是不可能的(谈到 GHC 8.6.4)。

您可以做的一件事是限定Prelude:

import qualified Prelude

可选地 as P,这将要求您在该库的任何名称之前显式键入 Prelude.(或 P.)。

如果您经常使用其他 Prelude 函数,您可以通过编写仅隐藏冲突标识符

import Prelude hiding (lines)

这将从命名空间中删除 Prelude.lines

如果你想在文件中的某处使用 Prelude 中的 lines,你可以将这个特定的标识符导入为合格的:

import           Prelude hiding (lines)
import qualified Prelude as P (lines)

恐怕是你能做到的一切。

关于haskell - 简洁地优先考虑ghci中的非Prelude函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641569/

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