使类型可显示。

时间:2016-04-26 18:42:23

标签: haskell

如何制作类型Showable?

while read -r line; do  
    echo "${line:2:2}${line:0:2}"
done < file.txt

通常情况下,我会输入type InterpreterMonad = StateT (Env, Env) (ErrorT String IO ) () ,但我有deriving Show而不是typenewtype

P.S。如何使用data编写上述内容?

1 个答案:

答案 0 :(得分:4)

type创建一个类型同义词。如果要创建实例,则必须为类型同义词的目标创建它 - 在本例中为StateT (Env, Env) (ErrorT String IO ) ()。但是,GHC无法为Show类型派生StateT个实例,因为StateT是函数类型的包装,而GHC无法导出Show功能类型。

您可以按如下方式编写新类型:

newtype InterpreterMonad = MkInterpreterMonad (StateT (Env, Env) (ErrorT String IO ) ())

但是这不允许你导出Show,因为InterpreterMonad现在是围绕函数类型的包装器的包装器。