Mar*_*ade 0 haskell types algebraic-data-types
我想知道在Haskell中这是否可行:
type DateTime = Date | Time | Date :+ Time
Run Code Online (Sandbox Code Playgroud)
......因此它可以是特定日期,特定时间或由两者组成的复杂值.
你刚刚做到了 - 当然有可能!
这就是我要做的:
data Both a b
= First a
| Second b
| Both a b
Run Code Online (Sandbox Code Playgroud)
有趣的是,这是一个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)
Run Code Online (Sandbox Code Playgroud)
如J.亚伯拉罕说,有一种叫做类型These
的包Data.These
,它包括Monad
和Bifunctor
实例,以及像一些真棒类型类实例Bifoldable
和Bitraversable
,是完全值得具有在偷看.