簡體   English   中英

類型之間的Haskell轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM