class A a
instance A (Int -> Float)
動作せず、
class B b
instance B Int
動作するHaskellの関数を最初のクラスとし、(Int-> Float)が(*)具象型ではないのに間違いなく型である場合、関数をクラスのインスタンスにできないのはなぜですか?
はい、Haskellでは関数型はそれほど特別ではありません。
module Test where
instance Show (a -> b) where
show _ = "(function)"
shkの回答で指摘されているように、ドメインの型や範囲を修正したい場合は、FlexibleInstancesのような拡張機能が必要になりますが、これは関数型とは関係がなく、次のような他の型構築アプリケーションに必要になります。Maybe Int
同じように。
FlexibleInstances拡張機能を使用すると、次のことができます。
{-# LANGUAGE FlexibleInstances #-}
module TestFlexibleInstances where
class A a
instance A (Int -> Float)