我正在Haskell中探索类型系列,试图确定我可以定义的类型级函数的复杂性.我想定义一个封闭的类型级版本mod,如下所示:
{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, UndecidableInstances #-}
import GHC.TypeLits
type family Mod (m :: Nat) (n :: Nat) :: Nat where
n <= m => Mod m n = Mod (m - n) n
Mod m n = m
Run Code Online (Sandbox Code Playgroud)
但是,编译器(GHC 7.10.2)拒绝这一点,因为不允许第一个等式中的约束.价值级别的警卫如何转换为类型级别?这在Haskell目前是否可行?