Nie, to nie jest obecnie obsługiwane. Standardowe podejście polega na dodaniu do każdego pola czegoś unikatowego dla danego typu danych, np. p2x
, p2y
, p3x
itp
Dlatego nie jest to obsługiwane, że każda płyta pole nazwy pośrednio tworzy funkcję „przełącznik”, np x :: Point2 -> Float
. Posiadanie dwóch pól o tej samej nazwie w tym samym zasięgu spowoduje wygenerowanie konfliktu.
Jest to od dawna nie lada problem dla wielu osób i zostanie rozwiązany przez nadchodzące rozszerzenie językowe OverloadedRecordFields
, które, miejmy nadzieję, będzie częścią GHC 7.12 (początek 2016 r.).
Po włączeniu to rozszerzenie zezwala na użycie tej samej nazwy pola w wielu rekordach. Selektor pól będzie miał typ przeciążony, który zostanie ogólnie rozwiązany przez wnioskowanie typu.
Pity nie mamy rozwiązanie dla tego przypadku. – jiyinyiyong
... ale jaki jest cel "DisambiguateRecordFields"? –