переименование текущего модуля - PullRequest
3 голосов
/ 31 июля 2010

Можно ли переименовать текущий модуль? Допустим, я хочу представить конструкторы данных Left и Right, но они будут конфликтовать с Prelude.Left и Right. Я не хочу писать везде MyModule.Left и MyModule.Right, я бы предпочел переименовать его как-нибудь в MyModule как M и написать M.Left. Является ли это возможным ? Какие есть альтернативы?

Ответы [ 3 ]

4 голосов
/ 31 июля 2010

Ответ Дарио дает самый простой способ сделать это, но, так как вы также запрашиваете альтернативы, вы можете посмотреть описание import объявлений в отчете Haskell или раздел «Загрузка модулей» Learn You a Haskell.

Одна из распространенных альтернатив локальным псевдонимам (т.е. import qualified SomeModule as X) - просто скрыть функции (или конструкторы) Prelude, если вы знаете, что они вам не понадобятся:

import Prelude hiding (Left, Right)
import MyModule

Вы также можете импортировать разные части модуля по-разному: одна общая хитрость - это прямой импорт типов модуля, но псевдоним его функций:

import Data.Map (Map)
import qualified Data.Map as M

import Data.Set (Set)
import qualified Data.Set as S

simpleMap :: Map String Int
simpleMap = M.singleton "one" 1

simpleSet :: Set String
simpleSet = S.singleton "one"

Это позволяет нам использовать обе функции singleton, но нам также не нужно вводить M.Map и S.Set в каждой сигнатуре типа.

1 голос
/ 31 июля 2010
import qualified YourModule as M
0 голосов
/ 11 августа 2010

У вас только один модуль. В этом случае самое простое решение - просто скрыть конструкторы данных (слева, справа) от Prelude (они определены здесь):

module MyModule where

import Prelude hiding (Left,Right)

В качестве альтернативы, вы можете просто импортировать квалифицированную прелюдию. Затем вам нужно вставить какую-нибудь букву перед любой функцией Prelude / stuff / etc:

module MyModule where

import qualified Prelude as P
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...