Elm-এ কাস্টম টাইপ নির্দিষ্ট সংখ্যক নামযুক্ত কেস প্রকাশ করে। প্রতিটি মান নামযুক্ত কেসগুলোর মধ্যে ঠিক একটির সাথে মেলে।
কাস্টম টাইপ type কিওয়ার্ড দিয়ে ডিফাইন করা হয় এবং এতে খুব কম সিনট্যাক্স লাগে। Elm প্রোগ্রামিংয়ের সবচেয়ে গুরুত্বপূর্ণ কৌশলগুলোর একটি হলো এগুলো। কোডে সম্ভাব্য মানগুলোকে বাস্তব জীবনের বৈধ মানগুলোর সাথে হুবহু মিলিয়ে দিতেই এগুলো ব্যবহার করা হয়, ফলে অবৈধ ডেটার কোনো সুযোগই থাকে না এবং অসম্ভব অবস্থা কোডে প্রকাশ করা অসম্ভব হয়ে পড়ে।
type Season
= Spring
| Summer
| Autumn
| Winter
কাস্টম টাইপের প্রতিটি কেসের সাথে চাইলে ডেটা যুক্ত থাকতে পারে, আর ভিন্ন ভিন্ন কেসে ভিন্ন ধরনের ডেটা থাকতে পারে। কোনো কেসের সাথে ডেটা যুক্ত না থাকলে, ডিসক্রিমিনেটেড ইউনিয়ন অনেকটা সেরকমই, যা অন্য ভাষায় সাধারণত এনুমারেশন (বা এনাম) নামে পরিচিত।
type FlexibleNumber
= Integer Int
| Float Float
| Invalid
কোনো নির্দিষ্ট কেসের জন্য মান তৈরি করা যায় তার নাম উল্লেখ করে (Spring), যখন কেসটি একই মডিউলে ডিফাইন করা থাকে বা import SeasonModule exposing (Season(..)) ধরনের সিনট্যাক্স দিয়ে ইমপোর্ট করা হয়; অথবা import SeasonModule exposing (Season) ধরনের সিনট্যাক্স দিয়ে ইমপোর্ট করা হলে তার ফুলি কোয়ালিফাইড নাম (Season.Spring) উল্লেখ করে।
integerTwo = Integer 2
invalid = FlexibleNumber.Invalid
Elm-এর সবকিছুর মতো কাস্টম টাইপেরও স্ট্রাকচারাল ইকুয়ালিটি আছে, অর্থাৎ একই কেসের এবং একই (ঐচ্ছিক) ডেটাযুক্ত দুটি মান সমতুল্য।
কাস্টম টাইপ নিয়ে কাজ করার সবচেয়ে পছন্দের উপায় হলো প্যাটার্ন ম্যাচিং:
let describe flexibleNumber =
case flexibleNumber of
Integer i ->
"Integer: " ++ fromInt(i)
Float f ->
"Float: " ++ fromFloat(f)
Invalid ->
"Invalid"
এই অনুশীলনীতে আজ ভালোবাসা দিবস, আর আপনি ও আপনার সঙ্গী একসাথে দারুণ কিছু করার পরিকল্পনা করছেন। আপনার সঙ্গীর মাথায় অনেক আইডিয়া আছে, আর কোন কাজটি করবেন তা বেছে নেওয়ার জন্য তিনি এখন আপনাকে সেই আইডিয়াগুলো রেট করতে বলছেন।
আপনার সঙ্গী নিচের আইডিয়াগুলো প্রস্তাব করেছেন:
আপনার ভালোবাসা দিবসের কাজটি বেছে নিতে সাহায্য করার জন্য আপনার হাতে ছয়টি কাজ আছে।
আপনার সঙ্গী যে আইডিয়াই প্রস্তাব করেন, তার জন্য আপনি তিনটি অপশনের একটি দিয়ে উত্তর দেন: yes, no বা maybe।
এই অপশনগুলোকে নিচের তিনটি কেস হিসেবে উপস্থাপন করতে Approval কাস্টম টাইপ ডিফাইন করুন: Yes, No এবং Maybe।
আপনার সঙ্গী সম্ভাব্য দুটি রেস্টুরেন্ট বেছে নিয়েছেন: একটি কোরিয়ান খাবারের, অন্যটি তুর্কি খাবারের।
এই খাবারের ধরনগুলোকে নিচের দুটি কেস হিসেবে উপস্থাপন করতে Cuisine কাস্টম টাইপ ডিফাইন করুন: Korean এবং Turkish।
বেছে নেওয়ার জন্য অনেক সিনেমা আছে, তাই পছন্দ একটু কমিয়ে আনতে আপনার সঙ্গী সিনেমাগুলোর ধরনও লিখে দেন।
নিচের ধরনগুলোকে কেস হিসেবে উপস্থাপন করতে Genre কাস্টম টাইপ ডিফাইন করুন: Crime, Horror, Romance এবং Thriller।
যেমন বলা হয়েছে, আপনার সঙ্গী পাঁচটি আলাদা অ্যাক্টিভিটি ঠিক করেছেন: বোর্ড গেম খেলা, আরাম করা, সিনেমা দেখা আর রেস্টুরেন্টে যাওয়া।
এই অ্যাক্টিভিটিগুলোকে উপস্থাপন করতে Activity কাস্টম টাইপ ডিফাইন করুন:
BoardGame: কোনো সংযুক্ত ডেটা নেই।Chill: কোনো সংযুক্ত ডেটা নেই।Movie: সংযুক্ত ডেটা হিসেবে এর Genre থাকে।Restaurant: সংযুক্ত ডেটা হিসেবে এর Cuisine থাকে।অবশেষে, আপনার সঙ্গীর আইডিয়াগুলো রেট করার জন্য আপনি তৈরি। আপনার সঙ্গীর আইডিয়াগুলো নিয়ে আপনার মনে যা হয়, তা হলো:
উপরের অনুভূতিগুলোর ভিত্তিতে একটি Activity মান নিয়ে Approval রিটার্ন করে এমন একটি ফাংশন ইমপ্লিমেন্ট করুন, যার নাম rateActivity:
rateActivity (Restaurant Turkish)
-- => Maybe
Exercism-এ সাইন আপ করুন, Elm ট্র্যাকের 28টি কনসেপ্ট110টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।