Δεδομένος
data BTree a = End
| Node a (BTree a) (BTree a)
deriving(Show,Eq,Ord)
data Msg = Msg { from :: String
, to :: String
, when :: Int
, message :: String }
instance Ord Msg where
compare a b = (when a) `compare` (when b)
instance Eq Msg where
(==) a b = (when a) == (when b)
Λειτουργία μου να μετρήσει κόμβους (που φαίνεται μακριά, αλλά αυτό είναι πέρα από το θέμα) είναι
count :: (Ord a) => (BTree a) -> Int
count = sum . count'
where
count' :: (Ord a) => (BTree a) -> [Int]
count' End = []
count' (Node _ l r) =
[1] ++ (count' l) ++ (count' r)
Μήπως countδεν αξιολογεί το περιεχόμενο της Msgλόγω της αξίας του που απορρίπτονται από _; Ίσως μια καλύτερη ερώτηση είναι, πώς μπορώ να ξέρω πού τεμπέλης ξεκινά αξιολόγησης και τελειώνει για αυτό το είδος του πράγματος;
Εάν η τρίτη γραμμή count'ήταν:
count' (Node (Msg x _ _ _) l r) =
Μπορώ να υποθέσουμε ότι οι άλλοι τρεις τομείς Msgήταν προσβάσιμες / αξιολογούνται, ή μήπως τεμπέλης αξιολόγηση πάνε τόσο μακριά;













