বছরের পর বছর ফর্ম পূরণ আর অপেক্ষা করার পর, অবশেষে আপনি আপনার ব্যাংকিং লাইসেন্স পেয়ে গেছেন। এর মানে হলো, এখন আপনি আনুষ্ঠানিকভাবে নিজের একটি ব্যাংক খোলার যোগ্যতা পেয়ে গেছেন, বাহ!
আপনার প্রথম কাজ হলো IT সিস্টেমগুলো চালু করা। একদিনের কঠোর পরিশ্রমের পর আপনি ইতিমধ্যেই অ্যাকাউন্ট খুলতে ও বন্ধ করতে পারছেন, আর উইথড্র ও ডিপোজিটও সামলাতে পারছেন।
টেস্ট লিখতে আপনার আলসেমি লাগছিল বলে, সিস্টেমটি টেস্ট করতে সাহায্যের জন্য আপনি কিছু বন্ধুকে ডেকে আনলেন। কিন্তু মাত্র পাঁচ মিনিটের মধ্যেই আপনার একজন বন্ধু দাবি করল যে তার টাকা হারিয়ে গেছে! আপনার কোডে কোনো বাগ নেই বলে আপনি নিশ্চিত, তবুও তদন্ত করতে আপনি লগগুলো দেখা শুরু করলেন।
আহা, ঠিক যেমনটা আপনি সন্দেহ করেছিলেন, দোষটা আপনার বন্ধুরই! সে তার টেস্ট ক্রেডেনশিয়াল আরেক বন্ধুর সাথে শেয়ার করেছিল, আর দুজনে মিলে ষড়যন্ত্র করে একই অ্যাকাউন্টে প্যারালালে ডিপোজিট ও উইথড্র করতে শুরু করেছিল। এমন কাজ কে-ই বা করে?
কারও পক্ষে প্যারালালে নিজের অ্যাকাউন্টে ঢোকা শারীরিকভাবে অসম্ভব বলে আপনি যখন তর্ক করছেন, তখনই আপনার বন্ধু আত্মতুষ্ট ভঙ্গিতে আপনাকে জানাল যে ব্যাংকের নিয়ম এটিকে সমর্থন করা আপনার জন্য বাধ্যতামূলক করে দিয়েছে। তাই প্যারালাল ব্যাংকিং সাপোর্ট নেই মানে গো-লাইভের সিগন্যালও নেই। দীর্ঘশ্বাস ফেলে আপনি মনে মনে টুকে নিলেন, কাল এটা নিয়ে কাজ করতে হবে। এতে আপনার লঞ্চের তারিখ অন্তত আরও একদিন পিছিয়ে যাবে, কিন্তু, যা হোক...
আপনার কাজ হলো এমন ব্যাংক অ্যাকাউন্ট তৈরি করা যেগুলোতে অ্যাকাউন্ট খোলা/বন্ধ করা, টাকা জমা এবং টাকা উত্তোলনের সুবিধা থাকবে।
যেহেতু ব্যাংক অ্যাকাউন্টে নানা রকমভাবে (ইন্টারনেট, মোবাইল ফোন, স্বয়ংক্রিয় চার্জ) ঢোকা যায়, তাই আপনার ব্যাংক সফটওয়্যারকে অবশ্যই একাধিক থ্রেড/প্রসেস থেকে (পরিভাষাটি আপনার প্রোগ্রামিং ভাষার উপর নির্ভর করে) সমান্তরালভাবে অ্যাকাউন্টে নিরাপদে ঢোকার সুবিধা দিতে হবে। উদাহরণস্বরূপ, একসাথে অনেক জমা ও উত্তোলন ঘটতে পারে; অ্যাকাউন্টের ব্যালেন্স পড়ার এবং নতুন ব্যালেন্স সেট করার মধ্যে যেন কোনো রেস কন্ডিশন না থাকে, তা আপনাকে নিশ্চিত করতে হবে।
একটি অ্যাকাউন্ট বন্ধ করা সম্ভব হওয়া উচিত; বন্ধ অ্যাকাউন্টে করা যেকোনো কাজ ব্যর্থ হতে হবে।
এই অনুশীলনীটি সম্পূর্ণ করতে হলে আপনাকে নিচের ফাংশনগুলো ইমপ্লিমেন্ট করতে হবে:
openAccount - প্রতিটি টেস্টের শুরুতে কল করা হয়। একটি BankAccount রিটার্ন করে।closeAccount - প্রতিটি টেস্টের শেষে কল করা হয়।getBalance - ব্যাংক অ্যাকাউন্টের ব্যালেন্স পাওয়া।updateBalance - প্রদত্ত পরিমাণ দিয়ে ব্যাংক অ্যাকাউন্টের ব্যালেন্স বাড়ানো।উত্তোলনের সময় পরিমাণ ঋণাত্মক হতে পারে।
ব্যাংক অ্যাকাউন্টের প্রাথমিক ব্যালেন্স 0 হওয়া উচিত।
একটি ডামি ডেটা ডিক্লারেশন ও টাইপ সিগনেচার আগেই দেওয়া থাকবে, তবে ফাংশনগুলো ডিফাইন করা এবং একটি অর্থবহ ডেটা টাইপ, newtype বা টাইপ সিনোনিম তৈরি করা আপনার হাতে।
সাহায্যের প্রয়োজন হলে, এখানে কিছু অতিরিক্ত রিসোর্স আছে:
Exercism-এ সাইন আপ করুন, Haskell ট্র্যাকের 107টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।