如何在Haskell中转换代数数据类型?

时间:2018-07-31 19:48:08

标签: haskell algebraic-data-types

我有点迷茫。我给了这些不同的时间。第一个是我们的正常时间设置。第二个是具有时区差异的时间设置(与现实世界无关,因为我知道没有12:45时区)。如果时间是上午,则第三个只有True。 我希望能够对这些时间集进行排序。创建列表并对其进行排序。我想我可以通过导入Data.List然后使用sort函数来做到这一点。如果将所有这些不同的时间集都转换为相同的时间集,会更容易。当地时间! 我的问题是如何将LocaltimeAM转换为Localtime?

data Time = Localtime {hour, minute :: Int}
          | Globaltime {hour, minute, difference :: Int}
          | LocaltimeAM {hour, minute :: Int, am :: Bool} 
          deriving Show

h :: Time -> (Int, Int)
h (Localtime h m) = (h, m)
h (Globaltime h m d) = ((h+d+24) `mod` 24, m)
h (LocaltimeAM h m am) = (h + (if am then 0 else 12), m)

1 个答案:

答案 0 :(得分:3)

我认为即使您使用它发布了一些代码,您也不了解模式匹配。 您可能应该阅读一个教程-网络上应该有很多。

您可以使用类似于您发布的功能将所有内容转换为Localtime。这是一个框架:您需要填补空白。

h :: Time -> Time
h (Localtime h m) = Localtime h m
h (Globaltime h m d) = Localtime (...) (...)
h (LocaltimeAM h m am) = Localtime (...) (...)
相关问题