怎么来的,下面的类型检查
{-# LANGUAGE RankNTypes #-}
module Main where
class Foo a where
type FunFoo = (Foo a) => a -> IO ()
data Bar = Bar {
funFoo :: FunFoo
}
setFunFoo :: FunFoo -> Bar -> Bar
setFunFoo action bar = bar {funFoo = action}
但是当将 setFunFoo 的类型签名更改为
setFunFoo :: ((Foo a) => a -> IO ()) -> Bar -> Bar
它不是?有没有办法在没有类型同义词 FunFoo 的情况下表达上述代码?