- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
type Song = (String, String, Int) --(title, artist, sales)
database :: [Song]
database = [("Amon Amarth","Ravens flight", 1),
("Amon Amarth","Shield wall", 11),
("Amon Amarth","The way of vikings", 105),
("Elijah Nang","Journey to the west", 1000),
("Elijah Nang","Tea house", 7),
("Pink Floyd","Wish you were here", 123),
("Amon Amarth","Raise your horns", 9001),
("NLE Choppa","Walk 'em down'", 69420),
("Elijah Nang","Kumite", 1337),
("NLE Choppa","Shotta flow 6", 511),
("Pink Floyd","Comfortably numb", 9),
("Pink Floyd","Shotta flow 6", 711), -- changed to match the name of an nle choppa song as requested
("Johannes Chrysostomus Wolfgangus Theophilus Mozart","Requiem", 10203948),
("Elijah Nang","Kenjutsu water style", 1),
("NLE Choppa","Shotta flow 5", 1),
("Pink Floyd","High hopes", 1),
("Amon Amarth","Deceiver of the gods", 1),
("Johannes Chrysostomus Wolfgangus Theophilus Mozart","Turkish march", 1),
("Chance The Rapper","Cocoa butter kisses", 1),
("Chance The Rapper","Favourite song", 1),
("Chance The Rapper","Hot shower", 1),
("Chance The Rapper","High hopes", 1)]
getTrackSale :: Int -> String -> String -> String --(index, artist, track, sales)
getTrackSale index artist track
| ((getArtist(database!!index) == artist) && (getTrack(database!!index) == track)) = getTrackSale(database!!index)
| otherwise = getTrackSale(index + 1 artist track)
task2 = getTrackSale(0 "Chance The Rapper" "Hot Shower")
getArtist :: Song -> String
getArtist (Song y _ _) = y
getTrack :: Song -> String
getTrack (Song _ z _) = z
getSale :: Song -> Int
getSale (Song _ _ x) = x
我无法弄清楚这意味着什么或如何解决它,我之前已经为三个“get”函数编写了相同的函数,并且它们没有遇到任何问题,但我之前确实使用了“type”声明,所以我想就是那个。我有使用相同类型声明的示例代码,它工作得很好,所以我在这里有点迷失。
最佳答案
你写
type Song = (String, String, Int)
这意味着Song
是(String, String, Int)
的类型同义词。也就是说,Song
实际上只是一个有序三元组,使用有序三元组构造函数 (,,)
构造。但后来你写了
getArtist :: Song -> String
getArtist (Song y _ _) = y
getTrack :: Song -> String
getTrack (Song _ z _) = z
getSale :: Song -> Int
getSale (Song _ _ x) = x
(不存在的)Song
数据构造函数上的模式匹配。
您可以通过编写来坚持使用类型同义词
getArtist :: Song -> String
getArtist (y, _, _) = y
等等。或者您可以将 Song
设为自己的数据类型:
data Song = Song
{ getArtist :: String
, getTrack :: String
, getSale :: Int }
在这种情况下,您必须修改database
定义才能使用Song
构造函数。使用自定义数据类型声明更加惯用并且更加自文档化,并且它使 Haskell 的类型系统可以做更多的工作来帮助您发现代码中的错误。作为一般规则,我建议 Haskell 初学者完全避免类型同义词,而更有经验的 Haskell 程序员在某些特殊情况下很少使用它们。特别是,类型同义词与 TypeFamilies
扩展结合使用非常有用,与 ConstraintKinds
和 RankNTypes
扩展结合使用也有些用处,但除此之外根据我的经验,这些内容往往令人困惑而不是有帮助。
关于database - 不在范围 : data constructor `Song' - Haskell 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63125243/
我想在我的单元测试中模拟一个遗留对象。这是构造函数: public Class LegacyClass{ public LegacyClass(Object... obj) {
此处说明https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function函数对象实例的构造函数属性“指定创建对
有没有办法从子类中的构造函数分配在父类(super class)中声明的实例变量?我已经习惯使用 BUILD() 作为构造函数,但我想知道这是否是个好主意。 IE: use v6; clas
鉴于以下情况: type AStruct struct { m_Map map[int]bool } 在这种情况下,AStruct的实例在AStruct.m_Map初始化之前不能使用: m_M
我是 Android 新手,我正在尝试学习如何使用 Gson 解析 API 调用。我已经阅读了一些内容,我正在尝试遵循这个示例:http://www.javacodegeeks.com/2011/01
我正在阅读 this文章,我不知道下面这行是做什么的。即使我删除了这一行,我也看不出有什么不同。 this.constructor.prototype.constructor.apply(this,A
这个问题已经有答案了: JsonMappingException: No suitable constructor found for type [simple type, class ]: can
我正在处理我的第一个 Flutter 项目,我正在构建一个登录页面,我创建了一个变量来存储一个 TextFormFieldController,但我收到了上面的错误,因为我删除了构造函数。当我返回这个
假设我们有以下主要和次要构造函数: open class Animal(val name:String){ internal constructor(message:InputStream): t
为什么默认复制构造函数不调用 monster 的基构造函数,但是当我在 troll 中包含一个用户定义的复制构造函数时,它会调用父级(即: 怪物) 构造函数? 我认为它的工作原理如下:创建基础对象,然
这个问题在这里已经有了答案: Is there a difference between foo(void) and foo() in C++ or C? (4 个答案) 关闭 8 年前。 我注意到
我将 T4MVC 与 MVC2 一起使用。 我有以下构建 block : 一个简单的实体接口(interface),它定义了每个 POCO 实体必须有一个 long Id属性(property): p
以下代码返回一个错误: “构造函数调用必须是构造函数中的第一个语句。” 我不明白。我的代码中的构造函数是第一条语句。我究竟做错了什么? public class labelsAndIcons exte
我是 kotlin 的新手,对它包含的所有有用的语法糖和功能感到惊讶。 但是每当我声明一个构造函数时,我都必须独立地将我的所有字段设为私有(private)。 class Result(private
作为主题,相关代码为: #include class ABC { public: ABC() { std::cout<< "default con
在 Haxe 中,我创建了一个名为 的类。我的类 喜欢: class MyClass { var score: String; public function new (score:
不确定为什么会这样,尝试删除所有 new 实例,从 const ect 切换到 let。可以运行站点,但是当我通过 html 表单运行发布请求时,在“const user = new UserSche
我是 Javascript 的新手,我正在尝试深入挖掘并理解继承、构造函数和原型(prototype)链。所以,我创建了一个构造函数, var a = function(){this.integer=
我知道 JavaScript 中的函数有双重生命,第一个是函数(作为创建实例的第一类事物),第二个是普通对象。 但是我很惊讶地看到下面控制台的输出。 function A() { consol
这个问题在这里已经有了答案: Why can't I access a property of an integer with a single dot? (5 个答案) 关闭 5 年前。 为什么
我是一名优秀的程序员,十分优秀!