Haskell 在Nat类型上定义自定义类型族

Haskell 在Nat类型上定义自定义类型族,haskell,type-level-computation,data-kinds,Haskell,Type Level Computation,Data Kinds,如何定义对类型的新计算GHC.TypeLits.Nat?我希望能够定义一个类型族 type family WIDTH (n :: Nat) :: Nat 这样WIDTH 0~0和WIDTH(n+1)~log2n我们可以对任何文本Nat进行模式匹配,然后使用内置操作递归 {-# LANGUAGE UndecidableInstances #-} import GHC.TypeLits type family Div2 n where Div2 0 = 0 Div2 1 = 0 D

如何定义对类型的新计算
GHC.TypeLits.Nat
?我希望能够定义一个类型族

type family WIDTH (n :: Nat) :: Nat

这样
WIDTH 0~0
WIDTH(n+1)~log2n
我们可以对任何文本
Nat
进行模式匹配,然后使用内置操作递归

{-# LANGUAGE UndecidableInstances #-}

import GHC.TypeLits

type family Div2 n where
  Div2 0 = 0
  Div2 1 = 0
  Div2 n = Div2 (n - 2) + 1

type family Log2 n where
  Log2 0 = 0  -- there has to be a case, else we get nontermination
              -- or we could return Maybe Nat
  Log2 1 = 0
  Log2 n = Log2 (Div2 n) + 1

type family WIDTH n where
  WIDTH 0 = 0
  WIDTH n = Log2 (n - 1)

那么
log20
呢?