Tôi đang sử dụng typeclass sau:Làm cách nào để yêu cầu Haskell không nhập cùng một cá thể từ hai mô-đun?
module T where
class T a where
v :: a
Một thể hiện của T Int
mà tôi thực hiện:
import T
import A (av)
instance T Int where
v = 0
main = putStrLn (av ++ show v)
Và một module mà tôi muốn sử dụng một giá trị từ, mà còn có một thể hiện của T Int
.
module A where
import T
instance T Int where
v = 0
av = "value from A"
Vấn đề là điều này không làm việc:
$ runghc Main.hs
Main.hs:4:9:
Duplicate instance declarations:
instance T Int -- Defined at Main.hs:4:9-13
instance T Int -- Defined at A.hs:3:9-13
Haskell phàn nàn rằng có 2 tờ khai cho các trường hợp tương tự. Làm cách nào tôi có thể yêu cầu anh ta không nhập khẩu cá thể từ B
hoặc để hợp nhất cả hai trường hợp hoặc chỉ sử dụng cá thể từ Main
?
Đừng làm điều này. Giải pháp thích hợp là chỉ khai báo cá thể ở một nơi. – hammar
@hammar: Tôi không viết 'T' hoặc' B', nhưng tôi muốn sử dụng giá trị từ 'B', và tôi muốn tạo một thể hiện' T'. – Dog
Ah, điều đó làm cho nó phức tạp hơn. Trong trường hợp đó, bạn có thể tạo một 'newtype' gói kiểu hiện có và viết thể hiện của bạn cho' newtype' để thay thế. – hammar