1
算術約束類型類的實例基本上,我希望能夠做這樣的事情:與類型
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
import GHC.TypeLits
newtype Foo (a::Nat) (b::Nat) c = Foo {getFoo :: c}
class Clz a where
instance Clz (Foo a (2*a) c) where
即,使的Clz
只有當a = 2*b
Foo a b
實例。
我知道問題出在最後一行的(2*a)
表達式上。當我嘗試編譯它時,我得到:
• Illegal type synonym family application in instance:
Foo a (2 * a) c
• In the instance declaration for ‘Clz (Foo a (2 * a) c)’
有沒有辦法解決這個問題?我將如何改變語法?我需要更多的語言擴展嗎?我正在使用最新的GHC(8.0.1)。
爲什麼不嘗試'實例b〜(2 * a)=> Clz(Foo a b c)'? – dfeuer