У меня естьмодуля и путь в Haskell
корень/Main.hs:
import ADT.Stack
main :: IO()
main =
putStrLn "Hi"
корень/ADT/Stack.hs
module Stack (Stack, empty, isEmpty, push, top, pop) where
...
После загрузки Main.hs, у меня есть ошибка
File name does not match module name: …
Saw: ‘Stack’
Expected: ‘ADT.Stack’
Если я изменю имя модуля на ADT.Sta ck в Stack.hs, я могу избавиться от ошибки. Однако я не понимаю причины такого ограничения.
Нет ли способа избежать указания в коде Stack.hs того, что уже закодировано в имени каталога, в котором оно содержится?
Если альтернативного способа нет, есть ли веская причина в этом?
интересно, чтобы ваше мнение как haskeller. спасибо – nicolas
ради полноты, я не уверен, что согласен с тем преимуществом, которое вы упомянули. он идет по цене: если вы перемещаете файл из каталога в другой, вам не только нужно изменить, где клиент найдет файл, но это нормально, но вы также должны сами изменить содержимое самих файлов! У меня нет много практики с этим, но это неправильно. Я считаю Agda более простой в этом отношении (нет избыточного кодирования, простого соглашения ..) – nicolas