আমি আমার সংগীত প্রকল্পে একটি ছোট্ট নান্দনিক সমস্যার মুখোমুখি হয়েছি এবং এটি কিছু সময়ের জন্য আমাকে বগল করছে।
আমার একটি টাইপ আছে data Key = C | D | ...
এবং আমি Scale
একটি Key
এবং এ থেকে একটি তৈরি করতে পারি Mode
। Mode
একটি প্রধান এবং একটি ছোটখাট স্কেল যেমন মধ্যে আলাদা।
আমি বর্ণনা করতে পারেন Mode
থেকে একটি ফাংশন হিসাবে টাইপ Key
করতে Scale
। সেক্ষেত্রে মোডগুলির ছোট হাতের নাম থাকবে (যা ভাল) এবং আমি এর মতো একটি স্কেল পেতে পারি
aScale = major C
তবে সংগীতজ্ঞরা এ জাতীয় কথা বলেন না। তারা এই স্কেলটিকে সি বড় স্কেল হিসাবে উল্লেখ করে , প্রধান সি স্কেল নয়।
আমি যা চাই
আদর্শভাবে আমি লিখতে চাই
aScale = C major
এটা কি আদৌ সম্ভব?
আমি কি চেষ্টা করেছি
আমি Key
একটি ফাংশন তৈরি করতে পারি যা একটি Scale
থেকে একটি তৈরি করে Mode
, তাই আমি লিখতে পারি
aScale = c Major
তবে আমি কীগুলি স্কেলগুলি তৈরির মধ্যে সীমাবদ্ধ রাখতে পারি না। এগুলি অন্যান্য জিনিসের জন্যও প্রয়োজন (যেমন জমিগুলি তৈরি করা )। এর Key
উদাহরণও হওয়া উচিত Show
।
আমি যখন কোনও অতিরিক্ত ফাংশন (বা মান নির্মাতা) ব্যবহার করি তার Mode
পরে আমি এটি রাখতে Key
পারি:
aScale = scale C major
সঙ্গে scale :: Key -> Mode -> Scale
তবে অতিরিক্ত শব্দ স্কেলটি গোলমাল এবং এর নামের সাথে বিপরীত দেখায়, scale
আঁশের সাথে সত্যই উদ্বিগ্ন নয়। বুদ্ধিমান অংশটি রয়েছে major
, scale
সত্যই সঠিক flip ($)
।
আরও বুদ্ধিমান হওয়ার প্রয়োজন newtype Mode = Major | Minor ...
ব্যতীত একটি ব্যবহারের ফলে খুব বেশি পরিবর্তন হয় না scale
:
aScale = scale C Major
major C
।