मैं हास्केल के लिए नया हूं और इसकी कुछ अवधारणाओं के आस-पास अपने सिर को लपेटने में कुछ कठिनाइयां हैं।आईओ [[स्ट्रिंग]] कैसे फ़्लैट करें?
आईओ के साथ खेलते समय मैं एक आईओ [[स्ट्रिंग]] को फ़्लैट करना चाहता था।
मैं क्या कोशिश की है का एक उदाहरण:
module DatabaseTestSO where
import Database.HDBC
import Database.HDBC.MySQL
import Data.Foldable
convSqlValue :: [SqlValue] -> [String]
convSqlValue xs = [ getString x | x <- xs ]
where getString value = case fromSql value of
Just x -> x
Nothing -> "Null"
listValues :: [[SqlValue]] -> [[String]]
listValues [] = []
listValues xs = [ convSqlValue x | x <- xs ]
flatten :: [[a]] -> [a]
flatten = Data.Foldable.foldl (++) []
domains :: IO [[String]]
domains =
do conn <- connectMySQL defaultMySQLConnectInfo {
mysqlHost = "hostname",
mysqlDatabase = "dbname",
mysqlUser = "username",
mysqlPassword = "pass" }
queryDomains <- quickQuery conn "SELECT name FROM domains" []
return (listValues queryDomains)
कि GHCi में [[String]]
साथ काम करता है के रूप में उम्मीद:
*DatabaseTestSO> flatten [["blah","blab","wah"],["bloh","blob","woh"],["blih","blib","wuh"]]
["blah","blab","wah","bloh","blob","woh","blih","blib","wuh"]
लेकिन IO [[String]]
जहाँ मैं
*DatabaseTestSO> flatten domains
<interactive>:1:9:
Couldn't match expected type `[[a0]]'
with actual type `IO [[String]]'
In the first argument of `flatten', namely `domains'
In the expression: flatten domains
In an equation for `it': it = flatten domains
पाने के साथ नहीं है मुझे लगता है कि मैं ऐसे फ़ंक्शन का उपयोग नहीं कर सकता जो आईओ प्रकारों के साथ शुद्ध होना चाहिए? क्या मैं IO [[String]]
से [[String]]
पर परिवर्तित कर सकता हूं? मैं इस समस्या को सही ढंग से कैसे हल करूं?
'flatten' को 'concat' कहा जाता है और इसे 'प्रीलूड' में परिभाषित किया जाता है। –
मैं देखता हूं। जीएचसीआई का उपयोग नहीं करते समय 'प्रीलूड' स्वचालित रूप से आयात किया जाता है? –
हां (फिलर ...) –