我有一个字节串b
与表单4*N(整数n)的长度,并且希望使用map
具有功能f::Word32->Word32
上b
(以便f
被施加到" b[0..3]
"," b[4..7]
",等等).如何以高效(优雅)的方式完成这项工作?
对不起,关于Haskell的新手问题......
使用中缀符号作为类型构造函数我该怎么办?我找到了下面这段代码,但ghc和ghci抱怨"意外类型`〜>'其中的类型变量"...
class Category (~>) where
(.) :: (a ~> b) -> (b ~> c) -> (a ~> c)
id :: a ~> a
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?非常感谢提前!
一个人如何可以推断的类型(.) . (.)
是(b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
?
(我的想法和这显然是错误的是:该类型的(.)
就是(t2->t3) -> (t1->t2) -> t1 -> t3
,这应该是相同的(t2->t3) -> [(t1->t2) -> (t1->t3)]
(也使用[]{}
.为便于阅读).因此,类型(.) . (.)
应该是这样的{(b2->b3) -> [(b1->b2) -> (b1->b3)]} -> {(a2->a3) -> [(a1->a2) -> (a1->a3)]}
,需要(b2->b3)
搭配[(a1->a2) -> (a1->a3)]
...
但这永远不会导致所需的类型.
怎么了?
对于不同的数据构造函数,我有两个几乎相同的函数,并想知道是否有可能统一两者.一个简约的例子如下
f_maybe :: Maybe a -> a -> a
f_maybe (Just x) _ = x
f_maybe _ x = x
Run Code Online (Sandbox Code Playgroud)
和
data T a = T1 a | T2 Int | T3
f_t :: T a -> a -> a
f_t (T1 x) _ = x
f_t _ x = x
Run Code Online (Sandbox Code Playgroud)
是一种只定义一个由类型构造函数(Maybe或T)和数据构造函数(Just或T1)执行参数化的函数的方法吗?
如何使用putStr和map输出字符串列表?我想做的事情如下:
s=["test1","test2"]
map putStr s
Run Code Online (Sandbox Code Playgroud)
但没有monad的经验,也不知道如何正确...
任何形式的提示都非常受欢迎!
我有一个关于haskell的初学者问题:如何分离例如案例表达式的多个模式以便将它们分成一行?例如,我想写一个定义
f x = case x of Nothing -> ""
Just _ -> "123"
Run Code Online (Sandbox Code Playgroud)
成一条线?如何才能做到这一点?是分离标志吗?非常感谢您的任何帮助!
关于Haskell中的类型,我有一个初学者的问题:有一个类似的函数:
f i xs = (sort xs) !! i
Run Code Online (Sandbox Code Playgroud)
如何在f0 xs = f 0 xs
不明确使用xs的情况下定义函数?刚刚服用
f0 = f 0
Run Code Online (Sandbox Code Playgroud)
不起作用......
ghci向我展示了愚蠢的类型:
f :: Ord a => Int -> [a] -> a
f0 :: [()] -> ()
但是":tf 0"给出了f 0 :: Ord a => [a] -> a
.
这是为什么?为什么我为f0获得此类型?为什么"f0"的类型和"f 0"的类型有什么区别?
非常感谢您提出任何建议
我有以下问题:我定义了一个类型类,并希望将此类的类型的元组声明为实例.但我不知道如何让GHC接受这个声明.这是一个非常简单的例子:
class Test a where
elm :: a
Run Code Online (Sandbox Code Playgroud)
并且知道元组我想要做类似的事情
instance (Test a, Test b) => Test (a,b) where
elm = (elm, elm) :: (a,b)
Run Code Online (Sandbox Code Playgroud)
(实际上,我想对与矢量空间相对应的更多花哨类型类做类似的事情.)
怎么做到这一点?在此先感谢您的任何建议!