ফাংশনগুলির জন্য কেন টাইপক্লাস নেই?


17

যে শিক্ষণ সমস্যায় আমি ঘাটাঘাটি করছি, আমি বুঝতে পেরেছিলাম যে আমার প্রয়োগ, রচনা ইত্যাদির জন্য ক্রিয়াকলাপগুলির জন্য টাইপক্লাসের প্রয়োজন আছে কারণগুলি ...

  1. এটি কোনও ফাংশনের উপস্থাপনের সাথে আচরণ করা সুবিধাজনক হতে পারে যেমন এটি নিজেই ফাংশন, যাতে ফাংশনটি প্রয়োগ করে স্পষ্টভাবে কোনও দোভাষী ব্যবহার করে এবং ফাংশনগুলি রচনা করে একটি নতুন বিবরণ পাওয়া যায়।

  2. একবার আপনার ফাংশনের জন্য টাইপক্লাস হয়ে গেলে, আপনি বিশেষ ধরণের ফাংশনগুলির জন্য টাইপক্লাস সংগ্রহ করতে পারেন - আমার ক্ষেত্রে, আমি ইনভারটিয়েবল ফাংশন চাই।

উদাহরণস্বরূপ, পূর্ণসংখ্যা অফসেটগুলি প্রয়োগ করে এমন ফাংশনগুলি কোনও পূর্ণসংখ্যাযুক্ত ADT দ্বারা প্রতিনিধিত্ব করা যেতে পারে। এই ফাংশনগুলি প্রয়োগ করার অর্থ কেবল পূর্ণসংখ্যা যুক্ত করা। মোড়ানো পূর্ণসংখ্যার যোগ করে রচনাটি প্রয়োগ করা হয়। বিপরীত ফাংশনটির পূর্ণসংখ্যা অবহেলিত থাকে। পরিচয় ফাংশন শূন্য মোড়ানো। ধ্রুবক ক্রিয়া সরবরাহ করা যায় না কারণ এর পক্ষে উপযুক্ত উপস্থাপনা নেই ation

অবশ্যই এটিগুলিকে বানান করার দরকার নেই যেমন এটির মানগুলি আসল হাস্কেল ফাংশন, তবে আমি একবার ধারণা পেয়েছিলাম, ভেবেছিলাম যে এর মতো একটি গ্রন্থাগার ইতিমধ্যে উপস্থিত থাকতে হবে এবং সম্ভবত স্ট্যান্ডার্ড বানানগুলি ব্যবহার করা উচিত। তবে আমি হাস্কেল লাইব্রেরিতে এ জাতীয় টাইপক্লাস খুঁজে পাই না।

আমি ডেটা ফাংশন মডিউলটি পেয়েছি , তবে টাইপক্লাস নেই - প্রিলিওড থেকে পাওয়া কিছু সাধারণ ফাংশন।

সুতরাং - কেন ফাংশন জন্য একটি টাইপক্লাস নেই? এটি "কেবল সেখানে নেই" বা "কারণ এটি আপনার মনে হয় তেমন দরকারী নয়"? অথবা ধারণাটি নিয়ে কোনও মৌলিক সমস্যা আছে?

এখন পর্যন্ত সবচেয়ে বড় সমস্যাটি আমি ভেবেছিলাম সবচেয়ে বড় সমস্যাটি হ'ল প্রকৃত ফাংশনগুলির উপর ফাংশন অ্যাপ্লিকেশনটি সম্ভবত একটি লুপিং সমস্যা এড়াতে সংকলক দ্বারা বিশেষ বিশেষায়িত হতে হবে - এই ফাংশনটি প্রয়োগ করার জন্য আমাকে ফাংশন অ্যাপ্লিকেশন ফাংশনটি প্রয়োগ করতে হবে, এবং এটি করার জন্য আমাকে ফাংশন অ্যাপ্লিকেশন ফাংশনটি কল করতে হবে এবং এটি করার জন্য ...

আরও ক্লু

আমি কী লক্ষ্য করছি তা দেখানোর জন্য উদাহরণ কোড ...

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}

--  In my first version, Doable only had the one argument f. This version
--  seemed to be needed to support the UndoableOffset type.
--
--  It seems to work, but it also seems strange. In particular,
--  the composition function - a and b are in the class, but c isn't,
--  yet there's nothing special about c compared with a and b.
class Doable f a b where
  fwdApply :: f a b -> a -> b
  compDoable :: f b c -> f a b -> f a c

--  In the first version, I only needed a constraint for
--  Doable f a b, but either version makes sense.
class (Doable f a b, Doable f b a) => Undoable f a b where
  bwd      :: f a b -> f b a

  bwdApply :: f a b -> b -> a
  bwdApply f b = fwdApply (bwd f) b

--  Original ADT - just making sure I could wrap a pair of functions
--  and there were no really daft mistakes.
data UndoableFn a b = UFN { getFwd :: a -> b, getBwd :: b -> a }

instance Doable UndoableFn a b where
  fwdApply = getFwd
  compDoable f g = UFN ((getFwd f) . (getFwd g)) ((getBwd g) . (getBwd f))

instance Undoable UndoableFn a b where
  bwd f    = UFN (getBwd f) (getFwd f)
  bwdApply = getBwd

--  Making this one work led to all the extensions. This representation
--  can only represent certain functions. I seem to need the typeclass
--  arguments, but also to need to restrict which cases can happen, hence
--  the GADT. A GADT with only one constructor still seems odd. Perhaps
--  surprisingly, this type isn't just a toy (except that the whole thing's
--  a toy really) - it's one real case I need for the exercise. Still a
--  simple special case though.
data UndoableOffset a b where
  UOFF :: Int -> UndoableOffset Int Int

instance Doable UndoableOffset Int Int where
  fwdApply (UOFF x) y = y+x
  compDoable (UOFF x) (UOFF y) = UOFF (x+y)

instance Undoable UndoableOffset Int Int where
  bwdApply (UOFF x) y = y-x
  bwd (UOFF x) = UOFF (-x)

--  Some value-constructing functions
--  (-x) isn't shorthand for subtraction - whoops.
undoableAdd :: Int -> UndoableFn Int Int
undoableAdd x = UFN (+x) (\y -> y-x)

undoableMul :: Int -> UndoableFn Int Int
undoableMul x = UFN (*x) (`div` x)

--  With UndoableFn, it's possible to define an invertible function
--  that isn't invertible - to break the laws. To prevent that, need
--  the UFN constructor to be private (and all public ops to preserve
--  the laws). undoableMul is already not always invertible.
validate :: Undoable f a b => Eq a => f a b -> a -> Bool
validate f x = (bwdApply f (fwdApply f x)) == x

--  Validating a multiply-by-zero invertible function shows the flaw
--  in the validate-function plan. Must try harder.
main = do putStrLn . show $ validate (undoableAdd 3) 5
          putStrLn . show $ validate (undoableMul 3) 5
          --putStrLn . show $ validate (undoableMul 0) 5
          fb1 <- return $ UOFF 5
          fb2 <- return $ UOFF 7
          fb3 <- return $ compDoable fb1 fb2
          putStrLn $ "fwdApply fb1  3 = " ++ (show $ fwdApply fb1  3)
          putStrLn $ "bwdApply fb1  8 = " ++ (show $ bwdApply fb1  8)
          putStrLn $ "fwdApply fb3  2 = " ++ (show $ fwdApply fb3  2)
          putStrLn $ "bwdApply fb3 14 = " ++ (show $ bwdApply fb3 14)

অ্যাপ্লিকেশনটিতে এক ধরণের একীকরণের সাথে জড়িত যেখানে একীভূত মানগুলি সমান নয়, তবে those অবিচ্ছিন্ন ফাংশনগুলির মাধ্যমে সম্পর্কিত - প্রোলোগ-স্টাইল যুক্তি নয় a = f(b)বরং বরং সীমাবদ্ধতার সাথে a = b। ইউনিয়ন-সন্ধানের কাঠামোটি অনুকূলকরণের ফলে বেশিরভাগ রচনাটির ফলাফল হবে। বিপরীতগুলির প্রয়োজনীয়তা সুস্পষ্ট হওয়া উচিত।

যদি কোনও ইউনিফাইড সেটে কোনও আইটেমের যথাযথ মান না থাকে তবে একটি নির্দিষ্ট আইটেম কেবল সেই ইউনিফাইড সেটটিতে অন্য আইটেমের তুলনায় পরিমাণমুক্ত হতে পারে। এজন্য আমি "রিয়েল" ফাংশনগুলি ব্যবহার করতে চাই না - those আপেক্ষিক মানগুলি গণনা করছি। আমি পুরো ফাংশনটির দিকটি ফেলে দিতে পারি এবং কেবল নিখুঁত এবং আপেক্ষিক পরিমাণ থাকতে পারি - আমার সম্ভবত কেবল সংখ্যা / ভেক্টর প্রয়োজন এবং (+)- তবে আমার অভ্যন্তরের আর্কিটেকচার নভোচারী তার মজা চান।

আমি লিঙ্কগুলি আবার আলাদা করার একমাত্র উপায় ব্যাকট্র্যাকিংয়ের মাধ্যমে এবং সমস্ত কিছু খাঁটি - ইউনিয়ন- IntMapফাইন্ডটি "পয়েন্টার" হিসাবে কীগুলি ব্যবহার করে করা হবে । আমার সাধারণ ইউনিয়ন-সন্ধানের কাজ রয়েছে, তবে আমি এখনও অবিরত ফাংশনগুলি যোগ না করায় এটি এখানে তালিকাভুক্ত করার কোনও মানে নেই।

যে কারণে আমি আবেদনকারী, মোনাড, তীর ইত্যাদি ব্যবহার করতে পারি না

প্রধান ক্রিয়াকলাপগুলি আমি সরবরাহ করতে ফাংশন অ্যাবস্ট্রাকশন ক্লাসের প্রয়োজন তা হ'ল অ্যাপ্লিকেশন এবং রচনা। এটি পরিচিত শোনায় - যেমন Applicative (<*>), Monad (>>=)এবং Arrow (>>>)সমস্ত রচনা ফাংশন। তবে, যে ধরণের ক্ষেত্রে আমার ক্ষেত্রে ফাংশন বিমূর্তি প্রয়োগ করে সেগুলিতে এমন কিছু ডেটা স্ট্রাকচার থাকবে যা কোনও ফাংশনকে উপস্থাপন করে তবে এটি কোনও ফাংশন (এবং ধারণ করতে পারে না) এবং যা কেবলমাত্র কিছু সীমিত ফাংশনের প্রতিনিধিত্ব করতে পারে।

আমি কোডটির ব্যাখ্যায় যেমন উল্লেখ করেছি, মাঝে মাঝে আমি কেবলমাত্র অন্যটির সাথে সম্পর্কিত একটি আইটেমের পরিমাণ নির্ধারণ করতে পারি কারণ "ইউনিফাইড" ক্লাস্টারের কোনও আইটেমের সঠিক মূল্য থাকে না। আমি সেই ফাংশনটির একটি উপস্থাপনা পেতে সক্ষম হতে চাই, যা সাধারণভাবে প্রদত্ত কয়েকটি ফাংশন (ইউনিয়নে একটি সাধারণ পূর্বপুরুষের কাছে চলে যাওয়া / গাছের সন্ধান করুন) এবং বেশ কয়েকটি বিপরীত ক্রিয়াকলাপের (অন্যটিতে ফিরে হাঁটতে হবে) গঠন করতে সক্ষম হতে চাই আইটেম)।

সাধারণ কেস - যেখানে মূল "ফাংশন" ইন্টিজার-অফসেট "ফাংশন" এর মধ্যে সীমাবদ্ধ রয়েছে, আমি সংহত ফলাফলটি একটি পূর্ণসংখ্যা-অফসেট "ফাংশন" হিসাবে চাই - উপাদান অফসেট যুক্ত করুন। এটি কেন অ্যাপ্লিকেশন ফাংশনের পাশাপাশি কমপোজিশন ফাংশনটি ক্লাসে থাকা প্রয়োজন তার একটি বড় অংশ।

এর অর্থ আমি ক্রিয়াকলাপগুলি সরবরাহ করতে পারি না pure, returnবা arrআমার প্রকারের জন্য তাই আমি ব্যবহার করতে পারি না Applicative, Monadবা Arrow

এটি এই ধরণের ব্যর্থতা নয় - এটি বিমূর্ততার মিল নয়। বিমূর্ততা আমি চাই একটি সাধারণ খাঁটি ফাংশন। কোনও পার্শ্ব-প্রতিক্রিয়া নেই, উদাহরণস্বরূপ, এবং সমস্ত ফাংশনের ক্ষেত্রে প্রমিত (।) এর সমতুল্য ব্যতীত অন্য ক্রিয়াকলাপগুলি সিকোয়েন্সিং এবং রচনা করার জন্য একটি সুবিধাজনক স্বরলিপি তৈরির প্রয়োজন নেই।

আমি উদাহরণস্বরূপ পারেCategory । আমি নিশ্চিত যে আমার সমস্ত কার্যকরী জিনিস একটি পরিচয় দিতে সক্ষম হবে, যদিও আমার সম্ভবত এটির প্রয়োজন নেই। তবে Categoryঅ্যাপ্লিকেশন সমর্থন করে না, সেই ক্রিয়াকলাপটি যুক্ত করার জন্য আমার এখনও একটি উত্সযুক্ত শ্রেণীর প্রয়োজন।


2
আমাকে পাগল বলুন, তবে আমি যখন টাইপক্লাসের কথা মনে করি যখন আপনি এটি প্রয়োগ এবং রচনা ইত্যাদির জন্য বর্ণনা করেন আমি আবেদনকারী ফান্টেক্টর সম্পর্কে চিন্তা করি যা কোন ফাংশন। আপনি যে টাইপ ক্লাসের কথা ভাবছেন তা সম্ভবত?
জিমি হফা

1
আমি Applicativeপুরোপুরি সঠিক বলে মনে করি না - এটির জন্য ক্রিয়াকলাপগুলির পাশাপাশি মানগুলি আবৃত করা দরকার, যেখানে আমি কেবল ফাংশনগুলি আবদ্ধ করতে চাই, এবং মোড়ানো ফাংশনগুলি সত্যই ফাংশন হয়, তবে আমার মোড়ানো ফাংশনগুলি সাধারণত হবে না (মধ্যে সর্বাধিক সাধারণ ক্ষেত্রে, তারা কার্যাদি বর্ণনা করে এএসটি)) যেখানে <*>টাইপ আছে f (a -> b) -> f a -> f b, আমি টাইপযুক্ত একটি অ্যাপ্লিকেশন অপারেটর চাই g a b -> a -> bযেখানে aএবং bমোড়ানো ফাংশনটির ডোমেন এবং কোডোমাইন নির্দিষ্ট করুন, তবে মোড়কের অভ্যন্তরে যা রয়েছে তা আসল ফাংশন নয়। তীরগুলিতে - সম্ভবত, আমার একটি চেহারা হবে।
স্টিভ 314

3
আপনি যদি বিপরীতমুখী চান তবে এটি একটি দলকে বোঝায় না?
জে কে।

1
@jk। দুর্দান্ত পয়েন্ট, উপলব্ধি করে যে ফাংশনগুলির বিপরীতগুলি সম্পর্কে পড়ার মতো প্রচুর জিনিস রয়েছে যা ওপিকে নেতৃত্ব দিতে পারে যে সে কী সন্ধান করছে। এখানে বিষয় সম্পর্কে কিছু আকর্ষণীয় পড়া বন্ধ। তবে হ্যাশেল ফাংশন ইনভার্সের জন্য একটি গুগল প্রচুর কৌতূহল পড়ার সামগ্রী দেয়। সম্ভবত তিনি কেবল ডেটা.গ্রুপ
জিমি হোফা

2
@ স্টিভ 314 আমি ভেবেছিলাম সংমিশ্রণ সহ ফাংশনগুলি একঘেয়েমি বিভাগ। ডোমেন এবং কোডোমেন সর্বদা একই থাকে তবে এগুলি একটি মনোহর।
টিম সেগুইন 21

উত্তর:


14

ভাল, আমি এমন কোনও বেকড ধারণাগুলি সম্পর্কে জানি না যা "ফাংশন-ওয়াই" বিষয়গুলির প্রতিনিধিত্ব করে বলে নিজেকে বাজারজাত করে। তবে এমন অনেকগুলি রয়েছে যেগুলি কাছে আসে

ধরন

আপনার যদি একটি সাধারণ ফাংশন ধারণা থাকে তবে আপনার বিভাগ আছে সেটির চেয়ে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা করে থাকা আইডিয়া রয়েছে that

class Category c where
  id :: c a a
  (.) :: c b c -> c a b -> c a c

অসুবিধা যে আপনি বস্তুর একটি সেট একটা চমৎকার বিভাগ উদাহরণস্বরূপ তৈরি করতে পারবেন না আছে ( a, b, এবং c)। আমি মনে করি আপনি একটি কাস্টম বিভাগের শ্রেণি তৈরি করতে পারেন।

তীর

আপনার ফাংশনগুলিতে যদি পণ্যগুলির ধারণা থাকে এবং তীরগুলি আপনার চেয়ে বেশি হয় তবে নির্বিচার ফাংশনগুলি ইনজেক্ট করতে পারে

 class Arrow a where
   arr :: (b -> c) -> a b c
   first :: a b c -> a (b, d) (c, d)
   second :: a b c -> a (d, b) (d, c)

ArrowApply প্রয়োগের একটি ধারণা রয়েছে যা আপনি যা চান তার জন্য গুরুত্বপূর্ণ দেখাচ্ছে looks

Applicatives

আবেদনকারীদের আপনার প্রয়োগের ধারণা রয়েছে, আমি এগুলি এএসটিতে ফাংশন অ্যাপ্লিকেশন উপস্থাপনের জন্য ব্যবহার করেছি।

class Functor f => Applicative f where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f b -> f c

আরও অনেক ধারণা আছে। তবে একটি সাধারণ থিমটি হ'ল আপনার ফাংশনকে উপস্থাপন করে এমন কিছু ডেটা স্ট্রাকচার তৈরি করা এবং এটি কোনও ব্যাখ্যামূলক ফাংশনে স্থান দেওয়া।

এটিও কতগুলি মুক্ত মনড কাজ করে। আমি যদি আপনি সাহসী বোধ করেন তবে এগুলিতে ঝাঁকুনির পরামর্শ দিচ্ছি, আপনি যে জিনিসটিকে পরামর্শ দিচ্ছেন তার জন্য তারা একটি শক্তিশালী হাতিয়ার এবং প্রয়োজনীয়ভাবে আপনাকে doস্বরলিপি ব্যবহার করে একটি ডেটাস্ট্রাকচার তৈরি করতে দেয় এবং তারপরে এটিকে বিভিন্ন ফাংশনগুলির সাথে একটি পার্শ্ব প্রতিক্রিয়াশীল গণনার মধ্যে ভেঙে দেয় । তবে সৌন্দর্যটি হ'ল এই ফাংশনগুলি কেবলমাত্র ডাস্টাস্ট্রাকচারে কাজ করে এবং আপনি কীভাবে এটি তৈরি করেছেন সে সম্পর্কে সত্যই অবগত নয়। আমি আপনার দোভাষীর উদাহরণের জন্য এটি প্রস্তাব করব suggest


বিভাগটি প্রয়োগের অভাব বলে মনে হচ্ছে - ($)। তীরগুলি প্রথম দর্শনে বিশাল ওভারকিলের মতো দেখায়, তবে এখনও ArrowApplyআশাব্যঞ্জক মনে হয় - যতক্ষণ না আমার কিছু সরবরাহ করার প্রয়োজন হয় না ততক্ষণে তা ঠিক নাও হতে পারে। আরও চেক করার জন্য এই মুহুর্তের জন্য +1।
স্টিভ 314

3
@ স্টিভ 314 বিভাগগুলির প্রয়োগের অভাব নেই, তবে মনাদাগুলি এগুলি চালানোর সর্বজনীন উপায়ের অভাব রয়েছে, এর অর্থ এই নয় যে তারা কার্যকর নয়
ড্যানিয়েল গ্রেটজার

একটি সাধারণ কারণ আমি ব্যবহার করতে পারেন না Applicativeবা Arrow(অথবা Monad) - আমি একটি স্বাভাবিক ফাংশন মোড়ানো করতে পারবে না (সাধারণ) কারণ আমার টাইপ মান প্রতিনিধিত্ব একটি ফাংশন কিন্তু হয় প্রতিনিধিত্ব তথ্য দ্বারা, এবং অবাধ ফাংশন সমর্থন করবে না যদি অনুবাদ করার একটি উপায় ছিল। তার মানে আমি প্রদান করতে পারেন না pure, arrবা returnদৃষ্টান্ত জন্য। বিটিডাব্লু - এই ক্লাসগুলি দরকারী তবে আমি তাদের এই বিশেষ উদ্দেশ্যে ব্যবহার করতে পারি না। Arrow"বৃহত্তর ওভারকিল" নয় - এটি শেষবার যখন আমি কাগজটি পড়ার চেষ্টা করেছি তখন থেকে এটি একটি মিথ্যা ধারণা ছিল, যখন আমি এটি বুঝতে প্রস্তুত ছিলাম না।
স্টিভ 314

@ স্টিভ 314 ডেটা তৈরির জন্য একটি মোনাড ইন্টারফেস সরবরাহ করার ধারণাটি হ'ল ফ্রি মোনাডগুলি কীসের জন্য ব্যবহৃত হয় তা পরীক্ষা করে দেখুন
ড্যানিয়েল গ্রেটজার

আমি হাস্কেল এক্সচেঞ্জ ২০১৩-এর ভিডিওটি দেখেছি - আন্দ্রেস লাহ অবশ্যই এটি ভালভাবে ব্যাখ্যা করেছেন, যদিও এখনও আমার সম্ভবত এটি আবার দেখা দরকার, কৌশলটি দিয়ে খেলুন ইত্যাদি আমি নিশ্চিত নই যে এটির এখানে দরকার আছে যদিও। আমার লক্ষ্যটি এমন একটি উপস্থাপনা ব্যবহার করে কোনও ফাংশনটির বিমূর্ততা রাখা যা কোনও ফাংশন নয় (তবে এতে একটি ইন্টারপ্রিটার ফাংশন রয়েছে)। আমার কোনও পার্শ্ব-প্রতিক্রিয়া বিমূর্তকরণ দরকার নেই এবং সিকোয়েন্সিং ক্রিয়াকলাপগুলির জন্য আমার একটি পরিষ্কার স্বরলিপি প্রয়োজন নেই। এই ফাংশন বিমূর্তিটি ব্যবহার করা হয়ে গেলে, অ্যাপ্লিকেশন এবং রচনাগুলি অন্য লাইব্রেরির একটি অ্যালগরিদমের অভ্যন্তরে একবারে করা হবে।
স্টিভ 314

2

আপনি উল্লেখ হিসাবে, এখানে প্রয়োগমূলক ব্যবহারের প্রধান সমস্যাটি হ'ল এর জন্য কোনও বুদ্ধিমান সংজ্ঞা নেই pure। সুতরাং, Applyআবিষ্কার করা হয়েছিল। কমপক্ষে, এটি আমার বোঝার।

দুর্ভাগ্যবশত, আমি এর দৃষ্টান্ত অন্যদিকে উদাহরণ আছে না Applyযে হয় না Applicative। এটি দাবি করা হচ্ছে এটি সত্য IntMap, তবে কেন তা আমার কোনও ধারণা নেই। একইভাবে, আমি জানি না আপনার উদাহরণ - অফসেট পূর্ণসংখ্যা - কোনও Applyউদাহরণ স্বীকার করে ।


এটি আরো একটি মন্তব্য দেখে মনে পড়লো, দেখুন উত্তর কিভাবে
মশা

দুঃখিত। এটি আমার প্রথম উত্তর কম বেশি কম।
ব্যবহারকারী 185657

আমি উত্তরটি উন্নত করার পরামর্শ দিচ্ছি কীভাবে?
ব্যবহারকারী 185657

পাঠকদের জিজ্ঞাসা করা প্রশ্নটি কীভাবে জিজ্ঞাসা করা হয়েছে তা জিজ্ঞাসা করার জন্য এন্ডিংয়ের সম্পাদনা বিবেচনা করুন , "ফাংশনগুলির জন্য কেন টাইপক্লাস নেই? এটি" কেবল সেখানে নেই "বা" কারণ এটি আপনার মনে হয় তেমন কার্যকর নয় "? অথবা হতে পারে ধারণাটির সাথে একটি মৌলিক সমস্যা আছে? "
gnat

1
আমি আশা করি এটি আরও ভাল
ব্যবহারকারী 185657

1

উল্লিখিত ছাড়াও Category, Arrowএবং Applicative:

আমি Data.Lambdaকনাল এলিয়ট দ্বারা এটিও আবিষ্কার করেছি :

কিছু ফাংশনের মতো ক্লাস, ল্যাম্বদার মতো নির্মাণ রয়েছে

আকর্ষণীয় দেখতে অবশ্যই, তবে উদাহরণ ছাড়া বোঝা মুশকিল ...

উদাহরণ

প্রকৃত মান (টিভি) সম্পর্কে উইকি-পৃষ্ঠায় উদাহরণ পাওয়া যায় যা TypeComposeগ্রন্থাগার তৈরির কারণগুলির মধ্যে অন্যতম বলে মনে হয় ; দেখতে ইনপুট এবং ফাংশন-মূল্যবান আউটপুট

টিভি লাইব্রেরির ধারণা হ্যাস্কেল মান (ফাংশন সহ) একটি স্পষ্টভাবে প্রদর্শন করা।

খালি দীর্ঘস্থায়ীদের পোস্ট না করার বিষয়ে স্ট্যাকওভারফ্লো নিয়মটি অনুসরণ করতে, আমি নীচে কিছু বিট অনুলিপি করছি যাতে এই বিষয়গুলির ধারণা দেওয়া উচিত:

প্রথম উদাহরণটি পড়ে:

apples, bananas :: CInput Int
apples  = iTitle "apples"  defaultIn
bananas = iTitle "bananas" defaultIn

shoppingO :: COutput (Int -> Int -> Int)
shoppingO = oTitle "shopping list" $
            oLambda apples (oLambda bananas total)

shopping :: CTV (Int -> Int -> Int)
shopping = tv shoppingO (+)

যা চালানোর সময় দেয় runIO shopping(আরও মন্তব্য, জিইউআই এবং আরও উদাহরণের জন্য দেখুন):

shopping list: apples: 8
bananas: 5
total: 13

এই ঠিকানাটি কীভাবে প্রশ্ন করা হয়েছে? দেখতে উত্তর কিভাবে
মশা

@gnat আমি ভেবেছিলাম যে সংজ্ঞাগুলি Data.Lambdaফাংশন-জাতীয় জিনিসগুলির জন্য ক্লাস দেয় (যার জন্য জিজ্ঞাসা করা হয়েছিল) ... এই জিনিসগুলি কীভাবে ব্যবহার করা হবে তা আমি নিশ্চিত ছিলাম না। আমি এটি কিছুটা অন্বেষণ করেছি। সম্ভবত, যদিও তারা ফাংশন অ্যাপ্লিকেশনটির জন্য কোনও বিমূর্ততা সরবরাহ করে না।
ইম্জ - ইভান জ্যাচারিয়াশেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.