小编J. *_*son的帖子

依赖键入'ZipVector'应用程序

我在有限s 上做了一个" ZipVector"风格Applicative,Vector它使用和类型将有限向量粘合到Unit模拟"无限"向量的s上.

data ZipVector a = Unit a | ZipVector (Vector a)
             deriving (Show, Eq)

instance Functor ZipVector where
  fmap f (Unit a)  = Unit (f a)
  fmap f (ZipVector va) = ZipVector (fmap f va)

instance Applicative ZipVector where
  pure = Unit
  Unit f   <*> p        = fmap f p
  pf       <*> Unit x   = fmap ($ x) pf
  ZipVector vf <*> ZipVector vx = ZipVector $ V.zipWith ($) vf vx …
Run Code Online (Sandbox Code Playgroud)

haskell types vector dependent-type

5
推荐指数
1
解决办法
131
查看次数

在haskell中实现解压缩功能

我正在尝试实现解压缩功能,我做了以下代码但是我收到了错误.

myUnzip [] =()
myUnzip ((a,b):xs) = a:fst (myUnzip xs)  b:snd (myUnzip xs)
Run Code Online (Sandbox Code Playgroud)

我知道问题出在第二行的右侧,但我确实知道如何改进它.任何提示请.

我得到的错误是

ex1.hs:190:22:
Couldn't match expected type `()' with actual type `[a0]'
In the expression: a : fst (myUnzip xs) b : snd (myUnzip xs)
In an equation for `myUnzip':
    myUnzip ((a, b) : xs) = a : fst (myUnzip xs) b : snd (myUnzip xs)


ex1.hs:190:29:
Couldn't match expected type `(t0 -> a0, b0)' with actual type `()'
In the return type of a call of …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
2
解决办法
6701
查看次数

如何退出一级导入的包

在haskell交互模式中,ghci.

如果我导入了一个包,例如: import Data.List

我去了 Prelude Data.List>

我的问题是,如何回到"前奏曲"

谢谢,

haskell ghci

2
推荐指数
1
解决办法
77
查看次数

高阶函数和缺少递归

我刚刚开始我的Haskell之旅,直到我遇到了currying,部分应用程序和更高阶函数(即当它开始变得有趣时)我正在飞行 - 是的我知道介绍的东西很容易,所以这个东西大概!)

无论如何,这个问题是关于更高阶函数.从一个众所周知的教程中给出这个例子

applyTwice :: (a -> a) -> a -> a  
applyTwice f x = f (f x)
Run Code Online (Sandbox Code Playgroud)

我可以看到它是如何工作的,如果我暂停我的怀疑,我相信我理解它.然而,令我感到困惑的是,为什么这不能解决问题.当我们重新进入回调时调用f(fx),我们肯定会再次模式匹配.我在这里错过了什么?

recursion haskell higher-order-functions

2
推荐指数
2
解决办法
175
查看次数

单构造函数代数数据类型:这是什么意思?

如果我创建这样的代数数据类型:

data Foo = String
Run Code Online (Sandbox Code Playgroud)

它是什么?它似乎不是一个总和类型(它旁边没有任何东西可供选择),但也不是一个产品类型(没有任何参数可以将它与之结合起来).这里是否有一些默认值,例如"带有单个构造函数的ADT是Sum类型"?

haskell algebraic-data-types

2
推荐指数
1
解决办法
164
查看次数

Haskell操作"+"是什么意思?

代码如下:

chop [n] lev = [n-1]
chop (n:m:xs) lev = n-1:lev +m:xs
Run Code Online (Sandbox Code Playgroud)

什么 n-1:lev +m:xs意思?
我知道m:xs是列表,列表如何添加一个int (n-1:lev)

谢谢!

haskell operators

1
推荐指数
1
解决办法
143
查看次数