2016-09-19 91 views
1

我在想什么(answers entry)totnChars entry = myLoop (answers entry)中的用法。这是否意味着该条目必须是answers?但entryEntryt类型不是entry理解一个Haskell函数

type Question = [Char] 
type Answer = [Char] 
type Music = [Char] 
data Entryt = MyEntry { 
         questions :: [Question], 
         answers :: [Answer], 
         music :: Music, 
         time :: Float 
         } deriving (Show, Eq) 



totnChars :: Entryt -> Int 
totnChars entry = myLoop (answers entry) 

myLoop :: [Answer] -> Int 
myLoop [] = 0 
myLoop (x:rest) = (nChars x 0) + (myLoop rest) 
+1

'answers'的类型是'Entryt - > [Answer]'。 – pyon

+0

我们通过明确书写(答案条目)获得了什么? – DoubleOseven

回答

5

answers是一个获取函数,用于检索给定条目的答案列表,因此totnChars entry = myLoop (answers entry)定义了一个函数,该函数接受条目并将myLoop应用于该条目的答案列表。

这是否意味着条目必须是答案类型?

号的语法说的东西必须是给定类型的将是expression :: Type,但answers不是一个类型。类型名称始终以Haskell中的大写字母开头。你可以引入一个变量,这个变量名为answers,但是没有任何意义。这绝对不是这里发生的事情。 answers entry只是一个普通的旧功能应用程序。

但是不是入口类型的Entryt?

是的。

3

answers没有类型[Answer]。它有型号Entryt -> [Answer]

“但为什么?”你可能会问。

每个Entryt都有自己的答案列表,可能会有所不同,从Entryt到另一个。因此,answers是一个函数,它接受Entryt并返回其答案列表。