我想知道在Haskell中这是否可行:
type DateTime = Date | Time | Date :+ Time
...因此它可以是特定日期,特定时间或由两者组成的复杂值。
答案 0 :(得分:5)
你刚刚成功 - 当然有可能!
这就是我要做的:
data Both a b
= First a
| Second b
| Both a b
有趣的是,这是一个bifunctor:
import Data.Bifunctor
instance Bifunctor Both where
bimap f _ (First a) = First (f a)
bimap _ g (Second b) = Second (g b)
bimap f g (Both a b) = Both (f a) (g b)
正如J. Abrahamson所说,包Data.These
中有一个名为These
的类型,其中包含Monad
和Bifunctor
个实例,还有一些很棒像Bifoldable
和Bitraversable
这样的类型类实例完全值得一看。