gpt4 book ai didi

haskell - 在 Nat 类型上定义自定义类型系列

转载 作者:行者123 更新时间:2023-12-04 01:45:30 25 4
gpt4 key购买 nike

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

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

这样 WIDTH 0 ~ 0WIDTH (n+1) ~ log2 n

最佳答案

我们可以对任何文字进行模式匹配 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)

关于haskell - 在 Nat 类型上定义自定义类型系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com