显示类型的实例

时间:2017-11-08 12:20:44

标签: haskell instance show

我的程序中有这些类型:

type Store = [(String, Float)]
type Handler = [String] -> Store -> IO (Store)

data Command = Command {
    name :: String,        -- Nom de la commande
    description :: String, -- Description de la commande
    exits :: Bool,         -- Drapeau pour sortir de la boucle 
                           -- Vrai pour quit, faux pour les autres
    run :: Handler         -- Le code à executer             
}

我想为Show HandlerShow Store创建两个实例,但我不知道Show Instance类型的正确语法。

2 个答案:

答案 0 :(得分:1)

您无法定义Show Handler,因为它是一种函数类型。你没有办法打破一个功能值并显示任何有用的东西。

您无需定义Show Store,因为它已根据Prelude中的instance (Show a, Show b) => Show (a,b)instance Show a => Show [a]进行了定义。

答案 1 :(得分:1)

如果您想显示处理程序,我建议使用处理程序捆绑名称:

data Handler = Handler String ([String] -> Store -> IO Store)

然后,当您创建处理程序时,请为其指定名称:

myHandler :: Handler
myHandler = Handler "my handler" $ \args store -> do
    ...

您可以使用该名称来显示处理程序:

instance Show Handler where
    show (Handler name _) = "<handler " ++ show name ++ ">"