OberonCore
https://forum.oberoncore.ru/

Частичный экспорт в Хаскелле
https://forum.oberoncore.ru/viewtopic.php?f=72&t=1714
Страница 1 из 1

Автор:  Geniepro [ Вторник, 14 Июль, 2009 12:34 ]
Заголовок сообщения:  Частичный экспорт в Хаскелле

Модератор: перенесено. Инициирующее сообщение viewtopic.php?p=31867#p31867
-----------------------------------------------------------------------------------------------
slava писал(а):
Поля должны быть скрытыми для всех сущностей вне модуля, но открытыми для всех сущностей внутри модуля.
В С++ Вам этого не отобразить.

Ада -- "да". Ява с ее пакетами, хоть как то "да". С++ -- "нет", Питон (насколько я знаю) -- тоже "нет".
Ещё в Хаскеле можно так сделать -- экспортировать часть конструкторов типов.
Правда, так как поля записей полностью описываются в одном конструкторе, то, возможно, придётся делать два конструктора -- один с полным набором полей для внутренних целей, другой -- только с публичными полями. Т.е. два представления одной и той же записи...

Автор:  Geniepro [ Вторник, 14 Июль, 2009 19:01 ]
Заголовок сообщения:  Re: Частичный экспорт в Хаскелле

Вот простой пример:

Пусть имеем такой модуль:
Код:
module TestRec (
    SomeRecord(Public),
    test
) where

data SomeRecord = Public  { a:: Int, b:: Char }
                | Private { a:: Int, b:: Char, c::String }

instance Show SomeRecord where
    show rec = "SomeRecord { a = " ++ show (a rec) ++ ", b = " ++ show (b rec) ++ " }"

test rec = Private (1 + a rec) 'b' "Hidden field"
Импортируем его из другого модуля:
Код:
module Main where

import qualified TestRec

rec1 = TestRec.Public 1 'a'
rec2 = TestRec.test rec1

main = do
    print rec1
    print rec2
Как и следовало ожидать, на экран выводится вот это:
Код:
SomeRecord { a = 1, b = 'a' }
SomeRecord { a = 2, b = 'b' }

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/