8

show(バイナリ)関数のメソッドを実装し、内部関数を区別できるようにしたいと思い(a -> a)ます。

疑似haskellコードのようなもの:

instance Show (a->b) where
    show fun = "<<Endofunction>>" if a==b
    show fun = "<<Function>>" if a\=b

2つのケースをどのように区別できますか?

4

1 に答える 1

15

いくつかの拡張機能を有効にする必要があります。

{-# LANGUAGE OverlappingInstances, FlexibleInstances #-}
module FunShow where

instance Show ((->) a a) where
    show _ = "<<Endofunction>>"

instance Show ((->) a b) where
    show _ = "<<Function>>"

OverlappingInstancesインスタンスa -> bは内部関数にも一致するため、重複があり、言語標準ではインスタンス宣言の型変数が異なることが義務付けられているため、必要ですFlexibleInstances

*FunShow> show not
"<<Endofunction>>"
*FunShow> show fst
"<<Function>>"
*FunShow> show id
"<<Endofunction>>"
于 2012-06-03T13:29:01.093 に答える