LINUX.ORG.RU

Импорт модулей в Хаскеле сделан через ж-пу


0

0

Казалось бы мелочь, но почему import Blablabla молча импортирует всё содержимое Blablabla в текущее пространство имён? Чтоб труднее было догадаться, из какого модуля какая функция взялась? И для того, чтобы этого не происходило, надо писать import qualified Blablabla as Blablabla - верх красоты, лол.

В том же Питоне Гвидо сделал всё по-человечески. Аналог хаскельного import A там выглядит как from A import *, а конструкция import A помещает все функции из модудя A в пространство имён A. Вот из-за таких мелочей Питон и нравится людям, а Хаскель так и остаётся уделом красноглазиков и профессоров.

Дискасс.

anonymous

А ещё более глобально сделано в PHP. Там вообще отказались от этих сложностей, не реализовав понятие модулей в принципе. Вот из-за таких мелочей PHP и хавает Web-рынок, а ... ну и так далее по тексту ;)

KRoN73 ★★★★★
()

#include с си по твоим рассуждениям вообще полное убожество, а за enum k&r надо казнить без суда и следствия.

anonymous
()

>Казалось бы мелочь

Не казалось бы, а действительно мелочь. Но из импорта модулей там действительно есть корявость. Там имена моделей "абсолютные".

Т.е. Если в каталоге Dir лежит Module1, то в его заголовке нужно писать Dir.Module1 => Если какая то библиотека переедет в иерархии из одного каталога в другой, то править придется все заголовки.

>Вот из-за таких мелочей Питон и нравится людям,

4.2

>а Хаскель так и остаётся уделом красноглазиков и профессоров.

Частично 4.2. Он такой, потому что он pure

ival ★★
()
Ответ на: комментарий от anonymous

>#include с си по твоим рассуждениям вообще полное убожество

#include и с preprocessor убожество не только по его рассуждениям.

ival ★★
()
Ответ на: комментарий от anonymous

> > #include и с preprocessor убожество не только по его рассуждениям.

>Но и по твоим?

Но и на самом деле :)

ival ★★
()
Ответ на: комментарий от anonymous

Я в курсе. Ещё бы все этим пользовались.

А речь изначально была о том, что импорт модуля в Хаскеле в своей простейшей форме import X ведёт себя вредным образом. Если язык и позволяет вывалить всё содержимое модуля в текущее пространство имён, эта фича должна быть запрятана чуть подальше, чтобы ей не пользовались по дефолту. В Питоне так и есть. В Хаскеле же для "правильного" импорта надо приложить дополнительные усилия: import qualified Some.Nested.Module as Module, поэтому не все этим пользуются, и в результате чужой код становится трудно читать.

И подобных недочётов, затрудняющих промышленное использование языка, в Хаскеле вагон.

anonymous
()
Ответ на: комментарий от anonymous

Я в курсе. Ещё бы все этим пользовались.

А речь изначально была о том, что импорт модуля в Хаскеле в своей простейшей форме import X ведёт себя вредным образом. Если язык и позволяет вывалить всё содержимое модуля в текущее пространство имён, эта фича должна быть запрятана чуть подальше, чтобы ей не пользовались по дефолту. В Питоне так и есть. В Хаскеле же для "правильного" импорта надо приложить дополнительные усилия: import qualified Some.Nested.Module as Module, поэтому не все этим пользуются, и в результате чужой код становится трудно читать.

И подобных недочётов, затрудняющих промышленное использование языка, в Хаскеле вагон.

anonymous
()
Ответ на: комментарий от anonymous

Ты сможешь привести реальную ситуацию, в которой это может повредить? Ты джаву хочешь с её километровыми импортами из хаскеля сделать?

anonymous
()
Ответ на: комментарий от anonymous

Ситуация простая. Открываешь чужой незнакомый код и видишь в нём море чужих незнакомых функций. Смотришь, откуда они взялись и видишь где-то в начале файла такое:

import Yi.Completion import Yi.Buffer import Text.Regex import Data.Char import Data.Typeable import Data.List import Control.Applicative import Control.Exception import Yi.Buffer.Normal import Yi.Buffer.Region import Yi.Editor import Yi.Core

Угу, иди прочёсывай все эти модули и запоминай, где что лежало. Капча nigers.

anonymous
()
Ответ на: комментарий от anonymous

Жабовские модули, между прочим, сделаны не менее через ж-пу, но об этом как-нибудь в другой раз.

anonymous
()
Ответ на: комментарий от anonymous

>Если язык и позволяет вывалить всё содержимое модуля в текущее пространство имён, эта фича должна быть запрятана чуть подальше, чтобы ей не пользовались по дефолту.

Если кто-то садится кодить не асилив в достаточной мере язык, то их нужно держать подальше, чтоб не дай бог чего-нибудь не испортили.

ival ★★
()
Ответ на: комментарий от anonymous

Блджад, форматирование.

import Yi.Completion
import Yi.Buffer
import Text.Regex
import Data.Char
import Data.Typeable
import Data.List
import Control.Applicative
import Control.Exception
import Yi.Buffer.Normal
import Yi.Buffer.Region
import Yi.Editor
import Yi.Core

anonymous
()
Ответ на: комментарий от ival

Ога, ога, разбросать побольше грабель, и пусть выживут только сильнейшие. Зачем тогда хаскель, если есть ассемблер и брейнфак?

И ещё беспокоит, что шансов на исправление подобных недочётов в хаскеле полный ноль. В то время как в питоне идёт постоянный процесс выкидывания старого негодного и замены его на новое. Если бы в питоне был такой балаган с модулями, я бы составил proposal и послал куда надо, его бы обсудили, и возможно, приняли. А по поводу хаскеля куда мне писать? В спротлото?

anonymous
()
Ответ на: комментарий от ival

>Запускаешь hugs, загружаешь модуль и делаешь

>:names

Или ghci> :info

imp ★★
()
Ответ на: комментарий от anonymous

>Ога, ога, разбросать побольше грабель, и пусть выживут только сильнейшие.

Да нет граблей в этом месте. Озвученные тобой грабли - в ДНК быдлокодеров, а не в языке.

>Зачем тогда хаскель, если есть ассемблер и брейнфак?

Haskell вроде бы позиционируется как "выкристаллизованные идеи FP" Брейнфак - просто занятная штука. Ассеблер - вообще здесь не к месту.

>И ещё беспокоит, что шансов на исправление подобных недочётов в хаскеле полный ноль.

Ровно как и у haskellа занять какую то определенную практическую нишу.

>В то время как в питоне идёт постоянный процесс выкидывания старого негодного и замены его на новое.

Зашибись. Чего же там такого нового и интересного?

>А по поводу хаскеля куда мне писать? В спротлото?

Понятья не имею.

ival ★★
()
Ответ на: комментарий от anonymous

> Угу, иди прочёсывай все эти модули и запоминай, где что лежало. Капча nigers.

Причёсывай, запоминай и пиши докладную. Либо увольняйся.

anonymous
()

Какой скучный тролль.

stassats ★★★★
()
Ответ на: комментарий от anonymous

> Угу, иди прочёсывай все эти модули и запоминай, где что лежало.

Нахуа? Загружаешь в ghci, затем :i имяФункции, тебе выдаёт:

имяФункции :: тип -- Defined at ИмяФайла.hs:строка:положение-в-строке

И всё. А можешь просто нажать C-c C-i RET и получить то же самое в минибуфере.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.