我正在尝试实现一个通用的类似环形的东西,并将其应用于 Paul Hudak 在《哈斯克尔音乐学院》一书中描述的音乐数据结构。当然,有很多半群/幺半群的恶作剧被省略,但我有以下相关代码:
\nnewtype Duo a b = Duo {duo1 :: a} -- A ring-like structure\n\ndata Song a =\n Primitive a\n | Song a :+: Song a -- Composing Music Sequentially\n | Song a :=: Song a deriving Eq -- Composing Music Concurrently (in parallel)\n\ninstance Functor Song where\n fmap f (x :+: y) = fmap f x :+: fmap f y\n fmap f (x :=: y) = fmap f x :=: fmap f y\n fmap f …Run Code Online (Sandbox Code Playgroud) haskell ×1