首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基础语法_Haskell笔记1

    这种只通过函数组合得到的,不涉及实际参数的函数风格被称为pointfree style P.S.注意,巨长的函数链会降低可读性,不鼓励这样做,应该通过let/where等声明把函数链拆开并赋予语义 五....表达式、where子句等场景,例如: [ x + y | (x, y) <- [(1, 2), (3, 4)] ] sumOneTwoThree = let (a, b, c) = (1, 2, 3)...c) = (1, 2, 3) in a + b + c let-in的作用与where类似,都用来定义局部变量/函数,区别如下: 形式上:let xxx in...与...where xxx的声明位置区别...,let把定义放在前面了 语法上:let-in是表达式,而where是语法结构,前者可以随便放 作用域上:let-in的作用域限制更严格,在let部分定义的变量/函数只对in部分可见 注意,同样要求多行声明要严格对齐...、let、List Comprehension等特定场景) 六.数据结构 List Haskell中的List是单一类型数组,例如: emptyArr = [] numbers = [1, 2, 3,

    2.8K30

    newtype_Haskell笔记8

    摘自Control.Applicative) 通过newtype关键字,基于现有类型([])创建一个新的(ZipList),再重写其接口实现: instance Applicative ZipList where...getOriginalType() { return this.originalValue; } ['']() { console.log('拉链结对'); } };// test let...thisOne = new ThisType(1); thisOne[''](); // 笛卡尔积 console.log(thisOne); // ThisType {value: 1} let...除此之外,就与data关键字没什么区别了 P.S.关于值构造器与参数,见类型_Haskell笔记3 三.对比type和data 关键字 作用 应用场景 data 定义自己的(数据)类型 想要定义完全新的类型...12:1 in interactive:Ghci1 能够用来检验惰性(计算到底执行了没),例如: > head [1, undefined, 3, undefined, undefined] 1 > let

    1K30

    Haskell 自定义type与typeclass

    前言 在看《Haskell趣学指南》这本书的Build Our Own Type and Typeclass一章时,不是很好理解,这里结合《Real World Haskell》这本书做一下记录。...自定义type Part One Haskell中使用data关键字来定义新的数据类型: data BookInfo = Book Int String [String] deriving (Show)...中的累的构造方法,BookInfo部分类似于OOP中的class,上文中的值构造器类似于class的构造方法,Book可以认为是构造方法的方法名,java等一些语言中构造方法是与class是同名的,但是Haskell...中很明显没有这种约束,Haskell中类型构造器和值构造器的命名是独立的, 所以其实值构造器是可以与类型构造器同名的,即上面的例子可以写成:data BookInfo = BookInfo Int String...这样我们就可以这样写: ghci> 3 :-: 4 :-: 5 :-: Empty (:-:) 3 ((:-:) 4 ((:-:) 5 Empty)) ghci> let a = 3 :-: 4 :-:

    57310
    领券