我在Haskell中进行了一个练习,我需要创建各种类型。第一种类型叫做Finite,其定义如下:
type Finite a = [a]
然后我需要返回一个像这样定义的单例
singleF :: a -> Finite a
所以我这样实现了它:
single n = [n]
然后我创建了另一种类型
type Enumeration a = Int -> Finite a
然后我需要重新实现单例函数
singleE :: a -> Enumeration a
根据我的理解,类型Enumeration
是从Int到类型a
列表的函数的同义词,但我无法理解我究竟能如何实现它。
从练习(前一种类型'有限'也称为'桶'):An enumeration is an infinite sequence of finite buckets, indexed by natural numbers
。
函数single:I suggest for simplicity that you put the sole item in bucket 0
,所以我认为int是枚举中存储桶的索引
答案 0 :(得分:5)
脱离我的头顶:
singleE :: a -> Enumeration a
singleE a 0 = singleF a
singleE _ _ = []
main :: IO ()
main = do
let s=singleE 'a'
print $ s 0
print $ s 5
给出
"a"
""
singleE为您提供了一个函数,它接受一个Int并返回一个有限元。如果传递0,则获得单元素的有限元素,否则为空元素。