我有以下进口:
{-# 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
换行符,并且该函数同时存在于Prelude
andData.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.
从错误消息中可以清楚地看出,这是失败的,因为和lines
都存在。Prelude
Data.Text.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
.