我的程序中有这些类型:
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 Handler
和Show Store
创建两个实例,但我不知道Show Instance
类型的正确语法。
答案 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 ++ ">"