do{…}中的Haskell Last generator必须是表达式错误类型的绑定错误

do{…}中的Haskell Last generator必须是表达式错误类型的绑定错误,haskell,Haskell,我在Haskell做一个小系统,我收到两个错误 “do{…}中的最后一个生成器必须是表达式”“并且 “显式类型绑定中的类型错误” 术语:(fname、lname、cnic) 类型:(a、b、c) 不匹配:数据库“ 我是哈斯凯尔的新手,所以请帮帮我 -------Data types------- type FirstName = String type LastName = String type CustomerNIC = String type Database = ( FirstName

我在Haskell做一个小系统,我收到两个错误 “do{…}中的最后一个生成器必须是表达式”“并且 “显式类型绑定中的类型错误” 术语:(fname、lname、cnic) 类型:(a、b、c) 不匹配:数据库

我是哈斯凯尔的新手,所以请帮帮我

-------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  
----数据类型-------
键入FirstName=String
键入LastName=String
类型CustomerNIC=String
类型数据库=(FirstName、LastName、CustomerNIC)
--类型详细信息=[数据库]
------数据库---------
示例库::[数据库]
exampleBase=[(“Kevin”、“Desilva”、“8929323V”),(“Nimal”、“Perera”、“89120323V”)]
-------主菜单-----------------------------
getInt::IO Int
getInt=do行数据库
searchByFirstName(a:ax)fname
|fname==getfName a=a
|长度ax==0&&getfName a/=fname=(“无数据”,“0”)
|否则=searchByFirstName ax fname
有几点:

  • 有一些奇怪的事情贯穿始终。确保使用的是空格,而不是制表符

  • 子搜索中
    ,您通常会有
    cnic几点:

    • 有一些奇怪的事情贯穿始终。确保使用的是空格,而不是制表符


    • 子搜索
      中,您经常会看到
      cnic总是告诉我们错误消息指的是哪几行。这些是哪几行?此网站上的代码列表不会自动编号。通常,最好在代码示例中添加注释,以指示错误所在的位置。请始终告诉我们错误消息所指的行。这些行是什么?此网站上的代码列表不会自动编号。通常最好在代码示例中添加注释,以指示错误的位置。Thanx对于您的注释…它在某种程度上帮助了我,而不是您的注释…它在某种程度上帮助了我