我在有限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) 我正在尝试实现解压缩功能,我做了以下代码但是我收到了错误.
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交互模式中,ghci.
如果我导入了一个包,例如: import Data.List
我去了 Prelude Data.List>
我的问题是,如何回到"前奏曲"
谢谢,
我刚刚开始我的Haskell之旅,直到我遇到了currying,部分应用程序和更高阶函数(即当它开始变得有趣时)我正在飞行 - 是的我知道介绍的东西很容易,所以这个东西大概!)
无论如何,这个问题是关于更高阶函数.从一个众所周知的教程中给出这个例子
applyTwice :: (a -> a) -> a -> a
applyTwice f x = f (f x)
Run Code Online (Sandbox Code Playgroud)
我可以看到它是如何工作的,如果我暂停我的怀疑,我相信我理解它.然而,令我感到困惑的是,为什么这不能解决问题.当我们重新进入回调时调用f(fx),我们肯定会再次模式匹配.我在这里错过了什么?
如果我创建这样的代数数据类型:
data Foo = String
Run Code Online (Sandbox Code Playgroud)
它是什么?它似乎不是一个总和类型(它旁边没有任何东西可供选择),但也不是一个产品类型(没有任何参数可以将它与之结合起来).这里是否有一些默认值,例如"带有单个构造函数的ADT是Sum类型"?
代码如下:
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)?
谢谢!