Haskell এ মডিউল ইমপোর্ট এবং এক্সপোর্ট
Haskell এ কোডকে সহজভাবে পরিচালনা ও পুনঃব্যবহারযোগ্য করার জন্য মডিউল ব্যবহার করা হয়। মডিউল হলো এক ধরনের কোডের সংগ্রহস্থল, যেখানে বিভিন্ন ফাংশন, টাইপ এবং কন্সট্রাক্টর সংরক্ষণ করা হয়। মডিউল ব্যবহার করে আমরা কোডকে গোষ্ঠীবদ্ধ করতে পারি এবং অন্যান্য মডিউল থেকে প্রয়োজনীয় অংশগুলি ইমপোর্ট করে ব্যবহার করতে পারি।
মডিউল ইমপোর্ট করা
Haskell এ একটি মডিউল থেকে ফাংশন বা টাইপ ব্যবহার করতে import স্টেটমেন্ট ব্যবহার করা হয়।
সাধারণ ইমপোর্ট
নিচে Data.List মডিউল ইমপোর্ট করার একটি সাধারণ উদাহরণ দেখানো হয়েছে:
import Data.Listএভাবে Data.List মডিউলের সমস্ত ফাংশন এই মডিউলে ব্যবহারযোগ্য হবে।
নির্দিষ্ট ফাংশন ইমপোর্ট
যদি নির্দিষ্ট কিছু ফাংশন বা কন্সট্রাক্টরই প্রয়োজন হয়, তবে শুধু সেগুলো ইমপোর্ট করতে পারেন:
import Data.List (sort, nub)এভাবে শুধুমাত্র sort এবং nub ফাংশনগুলো ইমপোর্ট করা হবে, যা Data.List মডিউলের অন্যান্য ফাংশনগুলোকে ইমপোর্ট না করেই কাজ করবে।
ইমপোর্ট অ্যালিয়াস (Import Alias)
মডিউল ইমপোর্ট করার সময়, অ্যালিয়াস ব্যবহার করে নাম সংক্ষেপ করা যেতে পারে। এর ফলে মডিউল নাম বারবার লেখার পরিবর্তে অ্যালিয়াস নাম ব্যবহার করা যায়।
import qualified Data.Map as Mএখানে Data.Map মডিউলটি M নামে ইমপোর্ট করা হয়েছে, এবং আমরা M.lookup, M.insert ইত্যাদি হিসেবে এই মডিউলের ফাংশন ব্যবহার করতে পারি।
কোয়ালিফাইড ইমপোর্ট (Qualified Import)
qualified কীওয়ার্ড ব্যবহার করলে মডিউলের ফাংশনগুলো সরাসরি নাম ব্যবহার না করে মডিউলের নাম উল্লেখ করে ব্যবহার করতে হয়। এটি নাম সংঘর্ষ এড়াতে সাহায্য করে।
import qualified Data.Listএখন, Data.List এর ফাংশনগুলো Data.List.sort, Data.List.nub ইত্যাদি নামে ব্যবহার করতে হবে।
মডিউল এক্সপোর্ট করা
একটি মডিউল থেকে নির্দিষ্ট ফাংশন, টাইপ বা ডেটা কন্সট্রাক্টর এক্সপোর্ট করা যায়, যাতে অন্যান্য মডিউল সেগুলো ব্যবহার করতে পারে। মডিউলের শুরুতে module এবং where কীওয়ার্ড ব্যবহার করে এক্সপোর্ট তালিকা নির্ধারণ করা হয়।
সবকিছু এক্সপোর্ট করা
নিচে একটি MyModule নামে মডিউল তৈরি করা হয়েছে, যা সব ফাংশন ও ডেটা এক্সপোর্ট করবে:
module MyModule where
add :: Int -> Int -> Int
add x y = x + y
multiply :: Int -> Int -> Int
multiply x y = x * yএখানে MyModule মডিউলের সব ফাংশন অন্য মডিউল থেকে ইমপোর্ট করা যাবে।
নির্দিষ্ট ফাংশন এক্সপোর্ট করা
একটি মডিউল থেকে নির্দিষ্ট ফাংশন এক্সপোর্ট করতে চাইলে এক্সপোর্ট তালিকা ব্যবহার করা হয়।
module MyModule (add) where
add :: Int -> Int -> Int
add x y = x + y
multiply :: Int -> Int -> Int
multiply x y = x * yএখানে শুধুমাত্র add ফাংশন এক্সপোর্ট করা হয়েছে। অন্য মডিউল থেকে multiply ফাংশন অ্যাক্সেসযোগ্য হবে না।
টাইপ এবং কন্সট্রাক্টর এক্সপোর্ট করা
টাইপ এবং তার কন্সট্রাক্টর এক্সপোর্ট করতে চাইলে টাইপের নাম এবং কন্সট্রাক্টর তালিকা উল্লেখ করতে হয়।
module MyModule (Shape(Circle, Rectangle)) where
data Shape = Circle Float | Rectangle Float Float
area :: Shape -> Float
area (Circle r) = pi * r ^ 2
area (Rectangle w h) = w * hএখানে Shape টাইপ এবং এর Circle ও Rectangle কন্সট্রাক্টর এক্সপোর্ট করা হয়েছে, তবে area ফাংশন এক্সপোর্ট করা হয়নি।
উদাহরণ: মডিউল ইমপোর্ট এবং এক্সপোর্ট
নিচে দুটি মডিউল তৈরি করা হয়েছে: MathModule এবং MainModule। MathModule এ কিছু গাণিতিক ফাংশন রয়েছে এবং MainModule থেকে সেগুলি ইমপোর্ট করা হয়েছে।
MathModule.hs
module MathModule (add, square) where
add :: Int -> Int -> Int
add x y = x + y
square :: Int -> Int
square x = x * x
subtractNum :: Int -> Int -> Int
subtractNum x y = x - yএখানে MathModule এ add এবং square ফাংশন এক্সপোর্ট করা হয়েছে, কিন্তু subtractNum ফাংশন এক্সপোর্ট করা হয়নি।
MainModule.hs
import MathModule (add, square)
main :: IO ()
main = do
print (add 5 3) -- আউটপুট: 8
print (square 4) -- আউটপুট: 16এখানে MathModule থেকে add এবং square ফাংশন ইমপোর্ট করা হয়েছে এবং MainModule এ ব্যবহার করা হয়েছে।
উপসংহার
Haskell এ মডিউল ইমপোর্ট এবং এক্সপোর্ট কোডের পুনঃব্যবহারযোগ্যতা, সংগঠন এবং মডুলারিটি বাড়ায়। ইমপোর্টের বিভিন্ন পদ্ধতি (সাধারণ, কোয়ালিফাইড, অ্যালিয়াস সহ) এবং এক্সপোর্ট কন্ট্রোল ব্যবহার করে প্রোগ্রামাররা প্রয়োজনমতো মডিউল গঠন এবং ব্যবহারের ক্ষেত্রে নমনীয়তা পায়।
Read more