Я пытаюсь использовать DisambiguateRecordFields, чтобы разрешить мне использовать одно и то же имя поля в разных записях, но я не могу заставить его работать. Например:Не удается получить DisambiguateRecordFields для работы
- Файл A.hs
{-# LANGUAGE DisambiguateRecordFields #-}
module A where
data ARec = ARec {nID :: Int, sDesc :: String}
- Файл B.hs
{-# LANGUAGE DisambiguateRecordFields #-}
module B where
data BRec = BRec {nID :: Int, sProdCode :: String}
- Файл Main.hs
{-# LANGUAGE DisambiguateRecordFields #-}
module Main where
import A
import B
zA = ARec 123 "Happy"
zB = BRec 456 "Usually"
main = putStrLn $ "zA's ID is " ++ show (nID zA)
Если я пишу над тремя файлами и: загрузите Main в GHCi, он жалуется на столкновение на nID. Я думал, что это именно то, что DisambiguateRecordFields было разработано для преодоления.
Любая помощь будет оценена!
Спасибо, Ян.
Спасибо за ответ, но я не вижу актуальности. В моем коде zA однозначно вводится как ARec с помощью конструктора. В bad2 k действительно двусмысленно. Кстати, проблема сохраняется, даже если я добавляю явные объявления типа zA :: ARec и zB :: BRec. – IanC
Правда, но это часть в круглых скобках: все еще _considered_ неоднозначная. 'DisambiguateRecordFields' просто не обрабатывает этот случай. Есть некоторые предложения для дальнейших расширений, которые могут помочь в остальных случаях, хотя: http://ghc.haskell.org/trac/ghc/wiki/Records – chirlu
Спасибо chirlu. Я думаю, что вы говорите, что это ограничение того, что в любом случае является расширением базового языка. Наверное, я разочарован тем, что это расширение делает очень мало; Я не думаю, что это поможет мне вообще в том, что я делаю. О, хорошо, мне лучше стандартизировать имена моих полей! – IanC