- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码段(摘自 Graham Hutton 的“Programming in Haskell”(第 9 章))
:{
Prelude| data Op = Add | Sub | Mul | Div
Prelude| instance Show Op where
Prelude| show Add = "+"
Prelude| show Sub = "-"
Prelude| show Mul = "*"
Prelude| show Div = "/"
Prelude| valid :: Op -> Int -> Int -> Bool
Prelude| valid Add _ _ = True
Prelude| valid Sub x y = x > y
Prelude| valid Mul _ _ = True
Prelude| valid Div x y = x `mod` y == 0
Prelude| apply :: Op -> Int -> Int -> Int
Prelude| apply Add x y = x + y
Prelude| apply Sub x y = x - y
Prelude| apply Mul x y = x * y
Prelude| apply Div x y = x `div` y
Prelude| data Expr = Val Int | App Op Expr Expr
Prelude| instance Show Expr where
Prelude| show (Val n) = n
Prelude| show (App o l r) = brak l ++ show o ++ brak r
Prelude| where
Prelude| brak (Val n ) = show n
Prelude| brak e = "(" ++ show e ++ ")"
Prelude| :}
产生这些错误:
<interactive>:455:22: error:
• Couldn't match type ‘Int’ with ‘[Char]’
Expected type: String
Actual type: Int
• In the expression: n
In an equation for ‘Prelude.show’: Prelude.show (Val n) = n
In the instance declaration for ‘Show Expr’
<interactive>:456:26: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘brak l’
In the expression: brak l ++ show o ++ brak r
In an equation for ‘Prelude.show’:
Prelude.show (App o l r)
= brak l ++ show o ++ brak r
where
brak (Val n) = show n
brak e = "(" ++ show e ++ ")"
<interactive>:456:36: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘show o’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
In the expression: brak l ++ show o ++ brak r
<interactive>:456:41: error:
• Couldn't match expected type ‘Ghci41.Expr’ with actual type ‘Op’
• In the first argument of ‘show’, namely ‘o’
In the first argument of ‘(++)’, namely ‘show o’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
<interactive>:456:46: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the second argument of ‘(++)’, namely ‘brak r’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
In the expression: brak l ++ show o ++ brak r
<interactive>:458:50: error:
• Couldn't match expected type ‘Ghci41.Expr’ with actual type ‘Int’
• In the first argument of ‘show’, namely ‘n’
In the expression: show n
In an equation for ‘brak’: brak (Val n) = show n
<interactive>:459:38: error:
• Couldn't match expected type ‘Int’ with actual type ‘[Char]’
• In the expression: "(" ++ show e ++ ")"
In an equation for ‘brak’: brak e = "(" ++ show e ++ ")"
In an equation for ‘Prelude.show’:
Prelude.show (App o l r)
= brak l ++ show o ++ brak r
where
brak (Val n) = show n
brak e = "(" ++ show e ++ ")"
<interactive>:459:45: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘show e’
In the second argument of ‘(++)’, namely ‘show e ++ ")"’
In the expression: "(" ++ show e ++ ")"
<interactive>:459:50: error:
• Couldn't match expected type ‘Ghci41.Expr’
with actual type ‘Expr’
NB: ‘Expr’ is defined at <interactive>:453:1-38
‘Ghci41.Expr’ is defined at <interactive>:246:1-35
• In the first argument of ‘show’, namely ‘e’
In the first argument of ‘(++)’, namely ‘show e’
In the second argument of ‘(++)’, namely ‘show e ++ ")"’
我不明白出了什么问题。有人可以帮忙吗?为了处理第一个错误,我是否需要将 n
的类型声明为字符串?其他错误报告指出了什么?
如果我看到类似这些特定错误报告,我应该采用什么策略来避免它们?
编辑:
我已经尝试了下面答案中的代码,但收到以下错误:
<interactive>:520:20: error:
• Couldn't match type ‘Int’ with ‘[Char]’
Expected type: String
Actual type: Int
• In the expression: show n
In an equation for ‘Prelude.show’: Prelude.show (Val n) = show n
In the instance declaration for ‘Show Expr’
<interactive>:520:25: error:
• Couldn't match expected type ‘Ghci41.Expr’ with actual type ‘Int’
• In the first argument of ‘show’, namely ‘n’
In the expression: show n
In an equation for ‘Prelude.show’: Prelude.show (Val n) = show n
<interactive>:521:24: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘brak l’
In the expression: brak l ++ show o ++ brak r
In an equation for ‘Prelude.show’:
Prelude.show (App o l r)
= brak l ++ show o ++ brak r
where
brak (Val n) = show n
brak e = "(" ++ show e ++ ")"
<interactive>:521:34: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘show o’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
In the expression: brak l ++ show o ++ brak r
<interactive>:521:39: error:
• Couldn't match expected type ‘Ghci41.Expr’ with actual type ‘Op’
• In the first argument of ‘show’, namely ‘o’
In the first argument of ‘(++)’, namely ‘show o’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
<interactive>:521:44: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the second argument of ‘(++)’, namely ‘brak r’
In the second argument of ‘(++)’, namely ‘show o ++ brak r’
In the expression: brak l ++ show o ++ brak r
<interactive>:522:34: error:
• Couldn't match expected type ‘Ghci41.Expr’ with actual type ‘Int’
• In the first argument of ‘show’, namely ‘n’
In the expression: show n
In an equation for ‘brak’: brak (Val n) = show n
<interactive>:523:23: error:
• Couldn't match expected type ‘Int’ with actual type ‘[Char]’
• In the expression: "(" ++ show e ++ ")"
In an equation for ‘brak’: brak e = "(" ++ show e ++ ")"
In an equation for ‘Prelude.show’:
Prelude.show (App o l r)
= brak l ++ show o ++ brak r
where
brak (Val n) = show n
brak e = "(" ++ show e ++ ")"
<interactive>:523:30: error:
• Couldn't match expected type ‘[Char]’ with actual type ‘Int’
• In the first argument of ‘(++)’, namely ‘show e’
In the second argument of ‘(++)’, namely ‘show e ++ ")"’
In the expression: "(" ++ show e ++ ")"
<interactive>:523:35: error:
• Couldn't match expected type ‘Ghci41.Expr’
with actual type ‘Expr’
NB: ‘Expr’ is defined at <interactive>:518:1-38
‘Ghci41.Expr’ is defined at <interactive>:246:1-35
• In the first argument of ‘show’, namely ‘e’
In the first argument of ‘(++)’, namely ‘show e’
In the second argument of ‘(++)’, namely ‘show e ++ ")"’
最佳答案
我在这里发现的唯一错误是 n
是一个 Int
,因此您需要使用 show
将其转换为 字符串
:
instance Show Expr where
show (Val n) = <b>show</b> n
show (App o l r) = brak l ++ show o ++ brak r
where brak (Val n) = show n
brak e = "(" ++ show e ++ ")"
此外,您没有显示 Op
的类型,但这应该是 Show
实例的类型。同样,因此您应该定义一个实例 Show Op
。
例如:
Prelude> data Op = Add | Sub | Mul | Div
Prelude> :{
Prelude| instance Show Op where
Prelude| show Add = "+"
Prelude| show Sub = "-"
Prelude| show Mul = "*"
Prelude| show Div = "/"
Prelude| :}
Prelude> data Expr = Val Int | App Op Expr Expr
Prelude> :{
Prelude| instance Show Expr where
Prelude| show (Val n) = show n
Prelude| show (App o l r) = brak l ++ show o ++ brak r
Prelude| where brak (Val n) = show n
Prelude| brak e = "(" ++ show e ++ ")"
Prelude| :}
然后我们可以这样查询:
Prelude> show (App Mul (Val 3) (App Add (Val 3) (Val 2)))
"3*(3+2)"
关于haskell - 涉及预期类型的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733948/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!