[英]Haskell conversion between types
再次停留在可能是理論上的東西上。 Haskell中有很多庫,我想盡量減少使用。 如果我有這樣的類型:
data Note = Note { _noteID :: Int
, _noteTitle :: String
, _noteBody :: String
, _noteSubmit :: String
} deriving Show
並使用它來創建[Note {noteID=1...}, Note {noteID=2...}, ]
等)的列表。 我現在有一個Note
類型的列表。 現在,我想使用writeFile
將其寫入文件。 考慮到writeFile的類型為FilePath -> String -> IO ()
String- FilePath -> String -> IO ()
,ghc可能不允許這樣做。 但是我也想避免一直解構(writeFile)和構造(readFile)類型,假設我不會離開Haskell的“領域”。 有沒有一種方法,而無需使用特殊的庫? 再次:非常感謝。 Haskell上的書籍不錯,但StackOverflow是書籍與現實世界之間的粘合劑。
如果您正在尋找“快速修復”,一次性腳本之類的東西,則除了Show
之外,還可以派生Read
,然后可以使用show
轉換為String
並通過read
進行轉換返回,例如:
data D = D { x :: Int, y :: Bool }
deriving (Show, Read)
d1 = D 42 True
s = show d1
-- s == "D {x = 42, y = True}"
d2 :: D
d2 = read s
-- d2 == d1
但是,請你, 請不要把這個在生產代碼。 首先,您隱式地依賴於記錄的編碼方式,並且沒有任何檢查可以防止微妙的更改。 其次, read
函數是局部的 -也就是說,如果無法解析輸入,它將崩潰。 最后,如果您以這種方式保留數據,則將受制於這種記錄格式,並且永遠無法更改它。
對於生產質量的解決方案,很抱歉,但是您必須提出一個明確的,已記錄的序列化格式。 不可能解決-用任何語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.