Không có khả năng kiểm soát việc nhập khẩu các cá thể là một trong những sự đánh đổi mà hệ thống kiểu chữ Haskell tạo ra. Dưới đây là một ví dụ trong một phương ngữ Haskell giả định mà bạn có thể:
Foo.hs:
module Foo where
data Foo = FooA | FooB deriving (Eq, Ord)
Bar.hs:
module Bar (myMap) where
import Data.Map (Map)
import qualified Data.Map as Map
import Foo
myMap :: Map Foo Int
myMap = Map.singleton FooA 42
Baz.hs:
module Baz where
import Data.Map (Map)
import qualified Data.Map as Map
import Foo hiding (instance Ord Foo)
import Bar (myMap)
instance Ord Foo where
FooA > FooB = True
FooB > FooA = False
ouch :: Map Foo Int
ouch = Map.insert FooB 42 myMap
Yikes! Tập hợp myMap
được tạo với đúng instance Ord Foo
, nhưng nó được kết hợp với bản đồ được tạo bằng khác nhau, ví dụ mâu thuẫn.
Có khả năng thực hiện việc này sẽ vi phạm giả thiết về thế giới mở của Haskell. Thật không may, tôi không biết một tài nguyên tập trung, tốt để học về nó. Điều này section of RWH có thể hữu ích (tôi đã tìm kiếm "giả định thế giới mở haskell").
Bản đồ, không phải là Bộ. Ví dụ hay, +1. –
@DanielFischer: Cố định, cảm ơn :) – ehird
Có nghĩa là, nếu muốn đi con đường đó, bạn sẽ phải tạo ra các thể hiện hạng nhất, sao cho một Bản đồ có thể mang theo từ điển Ord của nó xung quanh? –