Haskell中最一般的类型并对其进行定义

时间:2019-05-15 17:19:22

标签: haskell

您好,我的一些有关类型的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中这意味着什么,应该在这里做什么? 如有任何解释,我将不胜感激。这不仅仅是准备考试的任何家庭作业,任何帮助都将非常受欢迎。

1 个答案:

答案 0 :(得分:5)

以明确的括号开头:

f 7 (g 'a') == (f 7) (g 'a')

知道了7 :: Num a => a'a' :: Char,马上就知道了

f :: Num a => a -> b
g :: Char -> c

用于某些不受约束的类型bc。但是,我们也知道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