gpt4 book ai didi

haskell - 有没有机会写 "C major"而不是 "major C"?

转载 作者:行者123 更新时间:2023-12-02 01:14:23 26 4
gpt4 key购买 nike

我在音乐项目中遇到了一个小的审美问题,它一直困扰着我一段时间。

我有一个类型 data Key = C | D | ...我可以构造一个 Scale来自 KeyMode . Mode区分例如大调和小调音阶。

我可以定义 Mode类型为 Key 中的函数至Scale .在这种情况下,模式将具有小写名称(这很好),我可以得到这样的 Scale

aScale = major C

但音乐家不会这样说话。他们将此音阶称为 C 大调音阶,而不是 C 大调音阶。

我想要的

理想情况下我想写
aScale = C major

这可能吗?

我试过的

我可以制作 Key构造 Scale 的函数来自 Mode ,所以我可以写
aScale = c Major

但我不能将 Keys 限制在构建 Scales 上。其他事情也需要它们(例如构建和弦)。还有 Key应该是 Show 的一个实例.

我可以把 ModeKey 之后当我使用额外的函数(或值构造函数)时:
aScale = scale C majorscale :: Key -> Mode -> Scale
但是额外的词尺度看起来很嘈杂,与它的名字相反, scale并不真正关心秤。智能部分在 major , scale真的只是 flip ($) .

使用 newtype Mode = Major | Minor ...变化不大,除了 scale需要更智能:
aScale = scale C Major

最佳答案

解决方案一:

用这个

data Mode  = Major | Minor
data Scale = C Mode | D Mode | E Mode | F Mode | G Mode | A Mode | B Mode

现在你可以写(大写C和大写M)
aScale = C Major

解决方案 2a:

这也是可以的
data Mode  = Major | Minor
data Key = C | D | E | F | G | A | B

data Scale = Scale Key Mode

现在你写
aScale = Scale C Major

解决方案 2b:

这也是可以的
data Mode  = Major | Minor
data Key = C | D | E | F | G | A | B

type Scale = (Key, Mode)

现在你写
aScale = (C, Major)

关于haskell - 有没有机会写 "C major"而不是 "major C"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60002268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com