我知道標題是有點不清楚,問題是:如何撰寫這兩個功能
假設我有a -> c
類型的函數,b -> d
類型的其他功能,如何才能得到(a -> b) -> (c -> d)
類型的函數,還是一般不可能?
也許我應該提供一些背景知識。我問了這個問題,因爲我無法從論文Fun with phantom types解決練習9。
data Type t where
...
RFun :: Type a -> Type b -> Type (a -> b)
而且tequal
功能
tequal :: Type t -> Type u -> Maybe (t -> u)
...
tequal (RFun a b) (RFun c d) = -- should do something with (tequal a c) (tequal b d)
所以,問題歸結爲撰寫a -> c
和b -> d
得到(a -> b) -> (c -> d)
那是什麼?一個具有函數和返回函數的函數?你真的意思是第一個參數是(a - > b)嗎? – m0nhawk
是的,它是一個函數,它接受一個函數並返回另一個函數,只需從該類型中讀取即可。 –
只是由此產生的類型是完全沒有意義的,因爲你有一些不同的功能。 – m0nhawk