我有以下代碼
module Main where
data Company = C [Dept]
data Dept = D Name Manager [SubUnit]
data SubUnit = PU Employee | DU Dept
data Employee = E Person Salary
data Person = P Name Address
data Salary = S Float
type Manager = Employee
type Name = String
type Address = String
genCom :: Company
genCom = C [D "Research" ralf [PU joost, PU marlow], D "Strategy" blair []]
ralf, joost, marlow, blair :: Employee
ralf = E (P "Ralf" "Amsterdam") (S 8000)
joost = E (P "Joost" "Amsterdam") (S 1000)
marlow = E (P "Marlow" "Cambridge") (S 2000)
blair = E (P "Blair" "London") (S 100000)
main = print $ genCom
但是我收到以下錯誤訊息
* No instance for (Show Company) arising from a use of `print'
* In the expression: print $ genCom
In an equation for `main': main = print $ genCom
輸出我的物件的最佳方式是什么?
uj5u.com熱心網友回復:
您需要使型別成為型別類的實體,Show因為print :: Show a => a -> IO (). 如果型別是型別類的成員,Show則為show :: Show a => a -> String該型別定義方法。show有點類似于Java toString/ ToStringC# 等中的 / :它是一種將物件轉換為String.
您可以制作自定義實體,但最簡單的方法可能是讓編譯器自動派生實體。您可以通過添加到您定義的資料型別來做到這一點,因此:… deriving Show
data Company = C [Dept] deriving Show
data Dept = D Name Manager [SubUnit] deriving Show
data SubUnit = PU Employee | DU Dept deriving Show
data Employee = E Person Salary deriving Show
data Person = P Name Address deriving Show
data Salary = S Float deriving Show
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/482698.html
標籤:哈斯克尔
