1
將非常見類型類的實例聲明放在額外模塊中是不錯的樣式嗎?額外模塊中罕見類型類的實例聲明
作爲一個例子,我有這個簡單的樹類型:
module Data.Tree where
data Tree a = Leaf a
| Node (Tree a) (Tree a)
假設我想用快速檢查的Arbitrary
類型類生成Tree
類型的隨機值(和能夠不僅在測試中使用它們)。
什麼是最好的?把它們放在同一個模塊在Tree
定義
module Data.Tree where
import QuickCheck.Arbitrary
data Tree a = ...
instance Arbitrary a => Arbitrary (Tree a) where
...
或外包實例聲明另一個模塊,以避免Data.Tree
module Data.Tree.Arbitrary where
import Data.Tree
import QuickCheck.Arbitrary
instance Arbitrary a => Arbitrary (Tree a) where
...
或別的東西完全依賴於QuickCheck.Arbitrary
?
避免軟件包的依賴關係不只是一個性能問題,它是關於避免與可能有不同的版本庫的依賴其它軟件包之間的衝突。 –
@AlexeyRomanov:當然,但是在依賴衝突的情況下,孤立實例模塊可能也無濟於事。 – leftaroundabout
@leftaroundabout如果該模塊沒有暴露 - 例如如果它只在測試套件的內部使用,這看起來可能考慮到在問題中對快速檢查的明確討論。 –