У меня есть следующий импорт:
{-# 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
и Data.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 over
любая функция, определенная в 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
.