下面是一個簡單的例子,我用較大的記錄和函數進行一些數據操作。在我的實際代碼name
就像是一個訪問:當過濾記錄時從邏輯轉換中解耦邏輯
name = snd . fst . fst
不過我並不滿足於可讀性name
不是隻有一件事我要覈對。基於這個例子,是否有一種更簡單,慣用的方法將邏輯與場轉換分開?問題的
> data Athlete = Athlete { name :: String } deriving Show
> let registered = map Athlete ["John", "Mike"]
> let input = map Athlete ["John", "Ann"]
> filter (not . (`elem` (map name registered)) . name) input
[Athlete {name = "Ann"}]
部分是謂詞不僅僅取決於參數本身,並不一定檢查的Athlete
平等。由於我明確不想爭取平等的測試,理想情況下,邏輯部分應該如果input
類型改爲維持不變如下:
> data AthleteInput = AthleteInput { name :: String } deriving Show
我覺得這裏有一個有趣的問題,但你提出的問題並不清楚。 – leftaroundabout
類似於:'let func f input registered = filter(not。(\'elem \'(map f registered))。f)input'?不是100%確定要問什麼。 – Ophirr
我覺得你想要結構記錄 - 內置的記錄系統不會幫助你,但有很多庫實現記錄可供選擇。 – user2407038