功能编程中的一种设计方法是使非法国家无法代表.我总是看到这是通过类型的结构来完成的,但类型的价值呢?
如果我有一个名为Email的字符串怎么办?我只希望它保留一个有效的电子邮件地址(针对某些正则表达式进行检查)?如何以功能方式(不使用OOP)执行此操作?
对不起,如果问题非常简单,我对Haskell仍然很新.假设我有一个函数只能使用黄金比率中的两个数字(1.618),我如何定义myfun x y的类型以仅采用黄金比率数字.如果我在我的程序中调用没有黄金比例数字的myfun会出现什么情况(编译错误?)?如果没有黄金比例号码的呼叫是在运行时通过用户输入进行的,会发生什么?
假设我有一个函数原型如下:
func :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)
如何仅将非负的整数列表强制实施为输入参数?我必须将[Int]的param类型改为什么..?在这个公平的时刻它与func [-1,-2]一起工作,我只希望它与[1,2]一起工作,即解释器喷出错误信息.
在Haskell中,有没有办法通过其组件的值来限制数据类型?我已经起草了一个例子.假设你有一个跳棋游戏.检查器可以是黑色或白色类型.
data CheckerType = BlackChecker | WhiteChecker deriving (Eq)
data Checker = Checker CheckerType Int
Run Code Online (Sandbox Code Playgroud)
棋盘游戏的游戏板包含一组黑色棋子和白棋子.
data GameBoard = GameBoard ([Checker]) ([Checker])
Run Code Online (Sandbox Code Playgroud)
在之前的声明中,有没有办法在第一个[Checker]中强制执行CheckerType为CheckerType黑色,第二个是相反类型的Checkers?
我正在尝试编写一个函数
toPeano :: Int -> Nat
toPeano n =
Run Code Online (Sandbox Code Playgroud)
将整数转换为其Peano数.
我有数据:
data Nat =
Zero |
Succ Nat
deriving Show
Run Code Online (Sandbox Code Playgroud)
例如,
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
Run Code Online (Sandbox Code Playgroud)
等等.
我不知道如何在给定整数的情况下打印出Peano数字.我从未使用过Peano号码,所以对此有任何帮助将不胜感激!
谢谢!
我很好奇是否可以在 Haskell 中编写这样的(伪代码):
data Clock = Clock {hour :: (0 <= Int <= 24), minutes :: (0 <= Int <= 60)}
Run Code Online (Sandbox Code Playgroud)
使(在类型级别)无法创建如下内容:
let a = Clock 34 236
Run Code Online (Sandbox Code Playgroud)
或者应该使用一种时钟构建器来检查并创建有效的时钟时间?