আমি আমার সংগীত প্রকল্পে একটি ছোট্ট নান্দনিক সমস্যার মুখোমুখি হয়েছি এবং এটি কিছু সময়ের জন্য আমাকে বগল করছে।
আমার একটি টাইপ আছে 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।