小编Ada*_*s07的帖子

如何定义一个lambda函数,根据sum类型的子类型过滤列表?

该示例取自"基于第一原理的Haskell编程".过滤函数的目标是除去"DbDate"类型之外的所有对象.

在somone的github上,我找到了一种用列表理解和模式匹配来过滤和类型的方法(1).现在我试图找到一种方法,用lambda函数(2)或"if then"函数的正常"case"重新定义这个过滤器.当我处理自定义数据类型时,我不知道如何正确检查函数的参数类型.

本书不会向读者介绍任何超级特定的库函数,只是标准的地图,折叠,过滤器以及您在前奏中找到的其他内容.

import Data.Time

data DatabaseItem = DbString String
                  | DbNumber Integer
                  | DbDate   UTCTime
                  deriving (Eq, Ord, Show)

--List that needs to be filtered
theDatabase :: [DatabaseItem]
theDatabase =
  [ DbDate (UTCTime (fromGregorian 1911 5 1)
                    (secondsToDiffTime 34123))
  , DbNumber 9001
  , DbString "Hello, world!"
  , DbDate (UTCTime (fromGregorian 1921 5 1)
                    (secondsToDiffTime 34123))
  ]



--1 works fine, found on someone's git hub
filterDbDate :: [DatabaseItem] -> [UTCTime]
filterDbDate dbes = [x | (DbDate x) <- dbes] …
Run Code Online (Sandbox Code Playgroud)

lambda haskell functional-programming custom-data-type haskell-prelude

5
推荐指数
1
解决办法
169
查看次数