सवाल Tacit function composition in Haskell, लोगों a -> r
के लिए एक Num
उदाहरण बनाने उल्लेख की टिप्पणी में, इसलिए मैंने सोचा कि मैं समारोह अंकन का उपयोग गुणन का प्रतिनिधित्व करने के साथ खेलते हैं चाहते हैं:नंबर (अजीब लेकिन मनोरंजक)
{-# LANGUAGE TypeFamilies #-}
import Control.Applicative
instance Show (a->r) where -- not needed in recent GHC versions
show f = " a function "
instance Eq (a->r) where -- not needed in recent GHC versions
f == g = error "sorry, Haskell, I lied, I can't really compare functions for equality"
instance (Num r,a~r) => Num (a -> r) where
(+) = liftA2 (+)
(-) = liftA2 (-)
(*) = liftA2 (*)
abs = liftA abs
negate = liftA negate
signum = liftA signum
fromInteger a = (fromInteger a *)
ध्यान दें कि सेइंटर परिभाषा का अर्थ है कि मैं 3 4
लिख सकता हूं जो 12, और 7 (2+8)
का मूल्यांकन करता है, जैसा कि आप उम्मीद करेंगे।
तो यह सब अद्भुत, मनोरंजक रूप से अजीब हो जाता है! इस wierdness कृपया विस्तार से बताएं यदि आप कर सकते हैं:
*Main> 1 2 3
18
*Main> 1 2 4
32
*Main> 1 2 5
50
*Main> 2 2 3
36
*Main> 2 2 4
64
*Main> 2 2 5
100
*Main> (2 3) (5 2)
600
[संपादित करें:। इस्तेमाल किया इकाई के बजाय अनुप्रयोगी क्योंकि अनुप्रयोगी आम तौर पर बहुत अच्छा है, लेकिन यह कोड को बिल्कुल भी ज्यादा फर्क नहीं है]
जीएचसी 7.4 में, डमी 'शो' और' ईक 'उदाहरणों को हटाना संभव है, क्योंकि' अब 'अब उन्हें आवश्यकता नहीं है। – sdcvvc
'मोनाद' यहां अधिक है। सरल और अधिक सामान्य 'आवेदक' पर्याप्तताएं। – Conal
@ एसडीसीवीवीसी मैं जल्द ही कुछ ही उन्नयन कर रहा हूं, हां। – AndrewC