Text.Printf
पर एक प्रकार का सुरक्षित विकल्प formatting पी है ackage। Text.Printf.printf
संकलन-समय पर सुनिश्चित नहीं करता है कि स्वरूपण पैरामीटर की संख्या तर्कों और उनके प्रकारों की संख्या के साथ संरेखित होती है। उदाहरण के लिए क्रिस डोन का आलेख, What's wrong with printf? पढ़ें।
एक उदाहरण उपयोग:
{-# LANGUAGE OverloadedStrings #-}
import Formatting
map (uncurry $ formatToString ("Value: " % int % " " % int)) [(1,100), (2,350), ...]
map (\(x,y) -> formatToString ("Value: " % int % " " % int) x y) [(1,100), (2,350), ...]
यह ठीक ढंग से काम GHC विस्तार OverloadedStrings की आवश्यकता है।
जबकि formatToString ("Value: " % int % " " % int)
प्रकार Int -> Int -> String
है, uncurrying यह प्रकार (Int, Int) -> String
जिनमें से इनपुट प्रकार सूची में तत्वों से मेल खाता है देता है।
पुनर्लेखन प्रक्रिया को तोड़ दिया जा सकता है; f
= formatString ("Value: " ...)
,
map (\(x,y) -> f x y) ≡ map (\(x,y) -> uncurry f (x,y)) ≡ map (uncurry f)
संभालने है, पहले आप uncurry च समारोह है कि tuples को स्वीकार करता है को प्राप्त करने, और फिर आप प्रदर्शन एक नियमित Eta-conversion\(x,y) -> uncurry f (x,y)
के बाद से बस uncurry f
के बराबर है। परिणाम में प्रत्येक पंक्ति को मुद्रित करने के mapM_
का उपयोग करें:
mapM_ (putStrLn . uncurry $ formatToString ...) [(1,100), (2,350), ...]
आप hlint YourFile.hs चलाते हैं, तो इन पुनर्लेखन आप के लिए सिफारिश की जाएगी।
संबंधित http://stackoverflow.com/q/6237259/168034 – phunehehe