【发布时间】:2012-02-06 08:03:47
【问题描述】:
我正在用 Haskell 做一个小系统,但我遇到了两个错误 “do {...} 中的最后一个生成器必须是表达式”和 "显式类型绑定中的类型错误 术语 : (fname,lname,cnic) 类型:(a,b,c) 不匹配:数据库"
我是 haskell 的新手,所以请帮帮我。
-------Data types-------
type FirstName = String
type LastName = String
type CustomerNIC = String
type Database = ( FirstName , LastName , CustomerNIC )
--type Details = [Database]
------Data base---------
exampleBase :: [Database]
exampleBase = [ ( "Kevin" , "Desilva" , "8929323V" ),( "Nimal" , "Perera" , "89120323V" ) ]
-------Main Menu-----------------------------
getInt :: IO Int
getInt = do line <- getline
return (read line :: Int)
selectsearch ::IO()
selectsearch = do
putStr"\n\n\t 1.Search by NIC:"
putStr"\n\n\t 2.Search by First Name:"
putStr"\n\n\t Your Chocie:"
input<-getInt
subsearch input
subsearch :: Int->IO()
subsearch x = do
if(x=1) then do
putStr"\n\t Enter NIC:"
cnic <- getLine
subsearch
else if (x=2) then do
putStr"\n\t Enter First Name:"
cnic <- getLine
subsearch
else if (x=3) then putStr "\n ERROR"
selectsearch
else MainMenu
------- Search ------------
getfName :: Database -> FirstName
getfName ( fname , lname , cnic ) = fname
searchByFirstName :: Database -> FirstName -> Database
searchByFirstName (a:ax) fname
| fname == getfName a = a
| length ax == 0 && getfName a/= fname = ("No Data","",0)
| otherwise = searchByFirstName ax fname
【问题讨论】:
-
总是告诉我们错误消息指的是哪些行。
-
那是哪几行?本网站上的代码列表不会自动编号。通常最好在代码示例中添加 cmets 以指示错误所在。
标签: haskell