我想知道在IO monad尚未发明的时代,Haskell中的I/O是如何完成的.任何人都知道一个例子
编辑:现代Haskell中没有IO Monad可以完成I/O吗?我更喜欢一个适用于现代GHC的例子.
如何允许我的观看者使用Google表单将某些文件上传到我的表单并将其保存到我的Google云端硬盘?
我正在寻找一个完整的示例:它必须告诉要添加到示例Google Form HTML源代码的代码.如何使用Google Apps脚本将查看者的文件上传到我的Google云端硬盘帐户?
我正在编写一个具有相当多需要导出的函数的模块.此模块还具有大量数据结构.
假设我的模块包含以下内容:
module MyUtils (A(..), B(..),C(..),D(..),f1,f2,f3,f4,f5,f6) where
--Data constructors
data A = ...
data B = ...
data C = ...
data D = ...
--functions
f1 :: A -> B
f2 :: A -> B -> C
f3 :: A -> B -> D
f4 :: A -> B -> A
f5 :: A -> B -> B
f6 :: A -> B
Run Code Online (Sandbox Code Playgroud)
我在这里看到了Data.Map源 它显示它正在一个非常大的列表中导出大量函数.
但是,如果我想导出所有内容,可以使用快捷方法完成,例如,
module MyUtils (..) where
Run Code Online (Sandbox Code Playgroud)
?
我正在尝试一个简单的玫瑰树代码.
data RoseT a = Leaf a | Node a [RoseT a] deriving (Show)
instance Eq (RoseT a) where
(==) (Leaf a) (Leaf b) = a == b
(==) (Node a rs1) (Node b rs2) = and ((a==b): (zipWith (==) rs1 rs2))
(==) _ _ = False
Run Code Online (Sandbox Code Playgroud)
我可以使用quickcheck来测试Eq实例的实现吗?如果有,怎么样?如果不是,最好的选择是什么?
我还有一个功能,可以执行以下操作:
appendPath :: (RoseT a) -> (RoseT (a,[a]))
appendPath rst = appendPath' [] rst
appendPath :: [a] -> (RoseT a) -> (RoseT (a,[a]))
appendPath' p (Leaf a) = Leaf (a,p)
appendPath' p …Run Code Online (Sandbox Code Playgroud) 在 Haskell 中,我可以如下定义二叉树:
data Bint a = Leaf a | Branch a (Bint a) (Bint a)
Run Code Online (Sandbox Code Playgroud)
然后我可以对它进行一些操作,如下所示:
height (Leaf a) = 1
height (Branch a l r) = 1 + (max (height l) (height r))
count (Leaf a) = 1
count (Branch a l r) = 1 + (count l) + (count r)
Run Code Online (Sandbox Code Playgroud)
我知道 Pythondata在 Haskell中没有等效项。如果有,请告诉。
那么,如何在Python中定义一棵二叉树以及如何在其中实现上述两个功能呢?
我看到这段代码生成斐波纳契数.
fibs = 1:1:(zipWith (+) fibs (tail fibs))
是否可以编写类似的样式代码来生成无限列表[1 ..]?
给出了一个例子
cyclic = let x = 0 : y
y = 1 : x
in x
Run Code Online (Sandbox Code Playgroud)
我试图以循环方式为我的问题定义一个列表,但是不能成功.我想要的是一个根据自身定义的列表,它在Hasekll中评估为[1 ..].
注:Haskell的[1..]计算结果为[1,2,3,4,5...],而不是[1,1,1...].
我有一个包含以下行的文件:
one one
one one
two two two
one one
three three
one one
three three
four
Run Code Online (Sandbox Code Playgroud)
我想从文件中删除所有出现的重复行,只保留非重复行。因此,在上面的示例中,结果应该是:
two two two
four
Run Code Online (Sandbox Code Playgroud)
我看到了这个类似问题的答案。我尝试修改前一行,如下所示:
:syn clear Repeat | g/^\(.*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline ('.'), '".\^$*[]') . '$"' | d
Run Code Online (Sandbox Code Playgroud)
但它不会删除所有出现的重复行,它仅删除一些出现的重复行。
我怎样才能在 vim 中做到这一点?或者具体来说我怎样才能在 vim 中使用 ex 做到这一点?
澄清一下,我不是在寻找sort u.
我已经看到教会数字的以下数据构造函数
data Nat = Zero | Succ Nat deriving Show
Run Code Online (Sandbox Code Playgroud)
但这是一元数字.我们如何以这种方式在Haskell中实现二进制数的数据构造函数?
我试过这个:
data Bin = Zero | One | BinC [Bin] deriving Show
Run Code Online (Sandbox Code Playgroud)
在此之后,我们可以得到,十进制5编码为 BinC [One,Zero,One]
但我想我在这里遗漏了一些东西.我的解决方案似乎不像教会的解决方案那么聪明.毫不奇怪,我不是教会.一点点思考,我发现我的解决方案依赖于列表,而Nat不依赖于列表之类的任何外部结构.
我们是否可以使用Succ类型的二进制数构造函数编写类似于Church的解决方案?如果有,怎么样?我尝试了很多,但似乎我的大脑无法摆脱列表或其他一些这样的结构的需要.
如何使用Language.Haskell.Interpreter读取给定的配置文件并分配其中给出的值以初始化程序中的变量?
我的配置文件如下:
numRecords = 10
numFields = 3
inputFile = /home/user1/project/indata.file
outputFile = /home/user1/project/outdata.file
datefmt = ddmmyyyy
Run Code Online (Sandbox Code Playgroud)
我想使用配置文件中给出的值初始化与配置文件中给出的标识符相对应的变量.
我如何使用Language.Haskell.Interpreter来完成这件事?我很困惑因为IO Monad和Interpreter Monad.这种小例子也很有用.
haskell ×8
binary ×2
constructor ×2
cyclic ×1
ex ×1
export ×1
file-upload ×1
google-forms ×1
hint ×1
infinite ×1
interpreter ×1
io ×1
list ×1
module ×1
monads ×1
python ×1
quickcheck ×1
tree ×1
vim ×1