您好,我的一些有关类型的uni Haskell练习存在问题。我可以为(*),map等函数定义类型,但是当我必须定义以下类型时出现问题:
string = </info>;ct=0;if="sensor";obs;rt="urn:oma:lwm2m:oma:1",</time>;ct=0;if="sensor";rt="urn:oma:lwm2m:ext:3333",...
list = string.split(',')
for n in list:
if ";obs;" in list:
continue
print(n) # for check it
我如何开始呢?我知道我们应该使用一些最通用的统一器,但是我在互联网上什么都没找到?
此外,还有另一项任务是在考虑类型的可能类别的情况下找到最通用的类型。
- foldl(++)
- 平方(f x)
- g表示功能:
- g [] =没什么
- g [x] =只是x
- g(x:y:l)=如果x
这里最普通的类型是什么?在Haskell中这意味着什么,应该在这里做什么? 如有任何解释,我将不胜感激。这不仅仅是准备考试的任何家庭作业,任何帮助都将非常受欢迎。
答案 0 :(得分:5)
以明确的括号开头:
f 7 (g 'a') == (f 7) (g 'a')
知道了7 :: Num a => a
和'a' :: Char
,马上就知道了
f :: Num a => a -> b
g :: Char -> c
用于某些不受约束的类型b
和c
。但是,我们也知道b
是函数类型,因为f
的返回值应用于g
的返回值。此外,我们知道g
的返回值具有类型c
。因此,我们可以针对b
必须是什么来完善我们的猜测:
f :: Num a => a -> (c -> d) -- parentheses are redundant
g :: Char -> c
除了进行以下观察之外,此时您无能为力了:
f 7 :: c -> d
g 'a' :: c
f 7 (g 'a') :: d