Function 如何使用大写字母在haskell中定义函数?

Function 如何使用大写字母在haskell中定义函数?,function,haskell,Function,Haskell,例如,如何定义一个函数来使用大写字母生成斐波那契数,如:FIB n 我需要从终端调用函数,只使用大写字母,如:FIB 7。Haskell中的函数必须以小写unicode字符或下划线开头。以大写字母开头的符号保留给类型和构造函数 为什么只需要使用大写字母从终端调用函数?这似乎是一个相当武断的限制 如果你真的想阅读STDIN并处理它,我建议你这样写 import System.IO import Text.Read (readMaybe) import Control.Monad (forever

例如,如何定义一个函数来使用大写字母生成斐波那契数,如:FIB n 我需要从终端调用函数,只使用大写字母,如:FIB 7

。Haskell中的函数必须以小写unicode字符或下划线开头。以大写字母开头的符号保留给类型和构造函数

为什么只需要使用大写字母从终端调用函数?这似乎是一个相当武断的限制


如果你真的想阅读STDIN并处理它,我建议你这样写

import System.IO
import Text.Read (readMaybe)
import Control.Monad (forever)

data Operation
    = FIB Integer
    | FAC Integer
    | ADD Integer Integer
    deriving (Read)
-- The read instance is important here

fib :: Integer -> Integer
fib 0 = 1
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)

eval :: Operation -> Integer
eval (FIB n) = fib n
eval (FAC n) = product [1..n]
eval (ADD a b) = a + b

repl :: IO ()
repl = forever loop
    where
        parseResponse :: String -> String
        parseResponse resp = case readMaybe resp of
            Just op -> show $ eval op
            Nothing -> "Invalid operation"
        loop = do
            putStr "> "
            resp <- getLine
            putStrLn $ parseResponse resp

main :: IO ()
main = do
    hSetBuffering stdin LineBuffering
    hSetBuffering stdout NoBuffering
    repl
import System.IO
导入文本。读取(readMaybe)
进口管制.单子(永远)
数据操作
=FIB整数
|整数
|加整数
派生(读)
--read实例在这里很重要
整型->整型
fib 0=1
fib 1=1
fib n=fib(n-1)+fib(n-2)
eval::操作->整数
评估(FIB n)=FIB n
eval(FAC n)=产品[1..n]
评估(加上b)=a+b
repl::IO()
repl=永久循环
哪里
parseResponse::String->String
parseResponse resp=案例读取可能的响应
只需操作->显示$eval操作
Nothing->“无效操作”
循环=do
putStr“>”

resp嗯,你不能。函数名和变量名必须以小写字母开头。第一个大写字母保留给类型构造函数:

恐怕不行。看一看链接的问题,它问的是同样的问题,更多的细节和策略来绕过这个限制。这是针对一个班级的。无论如何,你认为实现这一点的唯一方法是通过获取字符串输入并处理它来调用所需的函数吗?@Reeshabh在这种情况下,是的。如果要为类编写某种类型的语法,无论如何都必须进行这种语法分析。如果您只想在GHCi中执行此操作,则必须使用以小写字母开头的标识符。我将编辑我的答案,展示一些你可以做的例子。谢谢。那帮了大忙!不仅仅是类型构造函数;构造函数,以及类。