首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Haskell/GHCi - 从不同目录加载模块

在这个问答内容中,我们有两个关键词:Haskell 和 GHCi。Haskell 是一种纯函数式编程语言,它的设计目标是为了实现可靠性和可维护性。GHCi 是 Haskell 的交互式编译器,它允许用户在命令行中输入 Haskell 代码并实时查看结果。

现在,我们要讨论如何从不同目录加载模块。在 Haskell 中,模块是一种将相关的函数和类型组织在一起的方式。要从不同目录加载模块,我们需要使用 Haskell 的模块系统。

首先,我们需要了解如何在 Haskell 中指定模块的路径。我们可以使用 -i 选项来指定模块的路径。例如,如果我们想从目录 mydir 加载模块 MyModule,我们可以在命令行中输入以下命令:

代码语言:txt
复制
ghci -i./mydir MyModule

这将使 GHCi 在当前目录下的 mydir 目录中查找模块 MyModule

如果我们已经在 GHCi 中加载了一个模块,我们可以使用 :m 命令来加载另一个模块。例如,如果我们想从目录 mydir 加载模块 MyModule,我们可以在 GHCi 中输入以下命令:

代码语言:txt
复制
:m + MyModule

这将加载模块 MyModule,并将其添加到当前会话中。

总之,要从不同目录加载模块,我们需要使用 Haskell 的模块系统,并在命令行中指定模块的路径。在 GHCi 中,我们可以使用 :m 命令来加载模块。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Haskell

通过官网,你可以下载到它的运行环境,目前Haskell根据你不同的场景需求,提供了几种安装包,最小的尝试,我们可以从Minimal installers开始,你可以根据你的操作系统平台来选择下载Core...ghc包含了三个主最要的部分: ghc 编译器 ghci 交互式解析器和调试器 runghc 以脚本的方式运行Haskell 而我们即将学习的起点就是在ghci中来练习Haskell的基本语法。...(注明:本文不是投资建议,仅仅是从Haskell引发出来的Cardano项目) 是的,Cardano就是用Haskell来编写的,(我这样的渣渣也仅仅是阅读和学习)Haskell的用户大部分都是教授或者是数学领域的牛人...Haskell有模块,也有高阶函数,同样的也有.操作符,更多的时候你要弄明白的是很多设计的哲学,带着Why,How去学习这门语言。...我觉得,我这小小门入,就不耽误大家了,如果大家有兴趣,一定可以从(http://learnyouahaskell.com/)Haskell官方指定的在线图书中找到属于自己的乐趣。

88330
  • Python在不同目录下导入模块的方法

    python在不同层级目录import模块的方法 使用python进行程序编写时,经常会调用不同目录下的模块及函数。本篇博客针对常见的模块调用讲解导入模块的方法。 ---- 1....同级目录下的调用 目录结构如下: – src |– mod1.py |– test1.py 若在程序test1.py中导入模块mod1, 则直接使用 *import mod1*或...调用子目录下的模块 目录结构如下: – src |– mod1.py |– lib | |– mod2.py |– test1.py 这时,如果想在程序...---- 补充__init__.py 在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有__init__....如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。 __init__.py 中还有一个重要的变量,叫做__all__。

    3K10

    Haskell 自定义type与typeclass

    前言 在看《Haskell趣学指南》这本书的Build Our Own Type and Typeclass一章时,不是很好理解,这里结合《Real World Haskell》这本书做一下记录。...5 :-: Empty ghci> 100 :-: a (:-:) 100 ((:-:) 3 ((:-:) 4 ((:-:) 5 Empty))) haskell在deriving Show的时候仍然会视值构造器为前缀函数...泛型instance Maybe或者List这种与TrafficLight不同,Maybe是一个泛型。它接收一个类型参数(像是Int)从而构造出一个具体的类型。...从Eq的typeclass的声明中可以看到a必须是一个具体的类型,而Maybe不是一个具体的类型我们不能写成这样: instance Eq Maybe where ......从上面我们可以看到fmap接收一个从a类型映射到b类型的函数和一个装有a类型值的functor,返回一个装有b类型值的functor 看下学list时学到的map函数: Prelude> :t map

    7710

    热爱函数式的你,句句纯正的 Haskell【类型篇】

    我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,有惰性求值和强静态类型; 在Haskell中,“函数是第一类对象”。...调试 目前 Haskell 的主要编译器是 GHC,下载地址,你可以创建 .hs 文件,用 Notepad++ 打开。 GHCi 是 GHC 的一部分,可以解析、调试 Haskell 程序。..." :r 用来重新导入当前的源代码文件; :cd 改变当前GHCi的路径; Prelude> :cd C:\Users\User\Desktop :edit 用默认的文本编辑器编辑当前导入的文件...函数可以理解为从参数到结果的一个映射,比如T1 -> T2。...上图不在灰色方框内的部分全部是类型类; Haskell 给很多“类型”分成了“类型类”,归为一类的类型有着共同的属性,不同类型所归的类就称为类型类。

    97130

    Heskell与函数式编程

    导语 :这个系列打算分为三部分,由浅入深地介绍所谓的函数式编程 1)Haskell入门 2)Monad介绍 3)函数式编程的思想 Haskell简介 Haskell诞生于1990年,是一门纯函数式编程语言...就一行代码,涉及了三个函数 1)filter :从价格集合中筛选出大于20的价格,形成新的集合 2)map:对1中产生的新集合进行变换处理,这里的处理是每个元素*0.9,也就是打九折 3)sum:对2中产生集合进行求和处理...编写第一个Haskell 编写Haskell之前需要把Haskell Platform下载下来(https://www.haskell.org/platform/),安装后使用ghci就可以进行Haskell...我的电脑是Windows,在Windows下打开cmd,输入ghci,就能进入编程界面,在这个界面能够进行简单的编码,比如下面: ? 这里简单的进行了一次 3+5的求和操作。...写完保存成文件(这里保存为cal.hs),以.hs作为后缀,在对应目录的命令行下面输入 :l 文件名 ? 调用自定义的函数findMax,输入参数1 3,然后就能够看到输出最大值3了。

    85370

    模块_Haskell笔记2

    ,可以通过qualified保留命名空间来避免冲突 GHCi环境 通过:m命令引用模块: > :m Data.List > :m Data.List Data.Map Data.Set GHC 7.0之后...,不用关注环境区别,具体见import qualified in GHCI 二.声明 模块用来组织代码,比如把功能相近的函数放到同一个模块中 例如二叉树的模块定义: module BTree -- 声明要暴露出去的函数及数据类型...模块具有树形层级结构,模块可以有子模块,子模块还可以有子模块…… 对目录结构及命名有要求,例如: . ├── main.hs └── Math ├── Number.hs └── Vector.hs...Bool -- 八进制数 isOctDigit :: Char -> Bool -- 十六进制数 isHexDigit :: Char -> Bool -- 字母,功能等价于isAlpha,实现方式不同...Set.fromList 集合去重效率高于List.nub,但缺点是构造集合会对元素进行排序,所以得到的去重结果不保留原顺序(List.nub会保留) 参考资料 Haskell/Modules Haskell

    1.7K30

    newtype_Haskell笔记8

    一.ZipList与List 在List场景,xs ys表示从左侧xs中取出函数作用于右侧ys中的每一项,有两种实现方式: 笛卡尔积 拉链式的一一结对 分别对应[]和ZipList,例如: import.../增强 语法要求 从语法作用来看,newtype与data一样,都用来创建新类型,但newtype限制更多: data can only be replaced with newtype if the...type 给现有类型起别名,得到的东西完全等价于原类型,可无条件换用/混用 想让类型签名更清楚(语义化)的时候 newtype 将现有的类型包成一个新的类型,得到的类型与原类型不同,不能换用/混用 想让现有类型具有一种不同的接口...libraries/base/GHC/Err.hs:79:14 in base:GHC.Err undefined, called at :12:1 in interactive:Ghci1...libraries/base/GHC/Err.hs:79:14 in base:GHC.Err undefined, called at :37:10 in interactive:Ghci17

    62130

    Haskell 基础

    第一个函数 创建doubleMe.hs文件,编写如下代码: doubleMe x = x + x 保存,打开ghci,输入 Prelude> :l doubleMe.hs 这样我们就加载了我们的doubleMe...中的if语句与其他语言不同,else是不可以省略的 doubleSmallNum x = if x > 10 then x else x * 2 Haskell 中的 if 语句的另一个特点就是它其实是个表达式...1 2 上面的例子就是从列表l中取下标为1的元素 list可以用来装list: Prelude> let l = [[1,2,3], [1,2,3,4], [1,2,3,4,5]] haskell不要求每个元素的长度一致...bangBoom xs = [if x > 10 then "BANG" else "BOOM" | x <- xs, odd x] tip: odd函数判读x是否是奇数,如果是则返回True 还可以从多个...five")] Prudule> zip [5,3,2,6,2,7,2,5,4,6,6] ["im","a","turtle"] [(5,"im"),(3,"a"),(2,"turtle")] 若是两个不同长度的

    7310

    深入typeclass_Haskell笔记4

    零.Typeclass与Class Typeclass就是Haskell中的接口定义,用来声明一组行为 OOP中的Class是对象模板,用来描述现实事物,并封装其内部状态。...后两条函数实现是可选的,通过间接递归定义来描述这两个函数的关系,这样只需要提供一个函数的实现就够了(这种方式称为minimal complete definition,最小完整定义) P.S.GHCi环境下...P.S.GHCi环境下,可以通过:info 命令查看该类型属于哪些typeclass 子类 同样,也有子类的概念,是指要想成为B类成员,必须先成为A类成员的约束: class (Eq a)...要求Num类成员必须先是Eq类成员,从语法上来看只是多了个类型约束。...Constraint也是一种kind,表示必须是某类的instance(即类型约束,经常在函数签名的=>左边看到),例如Num,具体见What does has kind ‘Constraint’ mean in Haskell

    51110

    Haskell Type与Typeclass

    Type ghci中可以用:t检测表达式的类型 Prelude> :t "a" "a" :: [Char] 函数也有类型,编写函数时给一个明确的类型声明是一个好习惯 removeNonUppercase...> tip: 按照其他语言中的习惯,Int,Int,Int -> Int好像看起来更为恰当一些,但实际haskell中->只有一个作用:它标识一个函数接收一个参数并返回一个值,其中->符号左边是参数的类型...haskell中所有函数都是只接收一个参数的,所有函数都是currying的。...注意,a 和 b 是不同的型别变量,但它们不一定非得是不同的型别,它只是标明了首项的型别与回传值的型别相同。..."True" || False True 但是执行下面的代码,就会提示错误: Prelude> read "5" *** Exception: Prelude.read: no parse 这是因为haskell

    7310

    基础语法_Haskell笔记1

    判断不等于(数学家的语言,所以不等号长这样) 注意,类型必须严格一致才能比较,否则报错认为没有可比性(1 == True会报错),但认为整型与浮点型是可比的(1 == 1.0是True) 运算符优先级 在GHCi...区别是目的不同,偏函数应用是为了减少函数所需参数数量(通过固定一些参数值),柯里化是为了把一个多参函数转换成单参函数,这个单参函数返回另一个单参函数(参数数量不足),或者求值(参数数量够了) 四.函数声明...参数列表后面多了| 条件表示不同的函数体分支,被调用时满足条件就执行对应函数体并返回,否则就按顺序依次向下检查 注意,最后的otherwise比较有意思,因为: > :i otherwise otherwise...部分定义的变量/函数只对in部分可见 注意,同样要求多行声明要严格对齐,非要单行就用分号隔开 P.S.let-in的in部分可以省略,作用域扩展到当前函数/List Comprehension,如果是在GHCi...: index too large 索引从0开始,越界会报错 多维数组 > [[1], [2, 3]] !! 1 !!

    1.9K30
    领券