{-# LANGUAGE NamedFieldPuns #-}
data Factory = Factory { fId :: Int}
data Link = Link Int Int Double
hasLinkTo :: Factory -> Link -> Bool
hasLinkTo Factory{fId} (Link fId _ _) = True
• Conflicting definitions for ‘fId’ Bound at: <source.hs> In an equation for ‘hasLinkTo’
我知道使用變量可以修復它,匹配
hasLinkTo Factory{fId=a} (Link b _ _) = a == b
我想請求
- 編制原因如何更好地理解模式匹配如何工作。
- 有沒有任何習慣寫法的函數?
例如:如果我想提取什麼聯繫到節點i
,我想寫這樣的事情
connected :: Int -> Link -> (Int, Double)
connected i (Link i j d) = (j,d)
connected i (Link j i d) = (j,d)
有隻使用模式匹配任何方式檢查(= =)在非數字文字?
connected 0 (Link 0 j d) = (j,d)
工作正常。但上面的例子不會。