我有一个函数正在执行某些特定数据类型的工作。我想知道我能不能把它变成一般人。下面是它的标志性的通用版本: f :: Monad m => ((a -> b) -> c -> d) -> (a -> m b) -> m c -> m d
如果以上不能写,或许更受限制的版本可以? f2 :: Monad m => ((a -> a) -> b -> b) -> (a -> m a) -> m b
鉴于年底追加: mangle :: String -> String
,我想要做的事,如: mangle xs = head xs -- works if you change typesig to [a] -> a
但: mangle xs = tail xs ++ head xs -- won't work at all!
会喜欢在列表末尾添加列表的第一个字符,切割第一个字符。
我正在尝试为项目的Haskell分配运行ghci。然而,它给了我此错误消息: /usr/local/haskell/ghc-8.2.1-x86_64/lib/ghc-8.2.1/bin/ghc: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or d
刚刚遇到了一件对我来说似乎很陌生的东西。反引号的功能类似于句法操作符。 applyOp :: Int -> (Int -> Int -> Int) -> Int -> Int
applyOp x op y = x `op` y
> applyOp 2 (+) 5
7
我很惊讶地看到这一点。我一直认为反引号需要包围一个运营商符号或标识符,而不是一个可以在执行过程中绑定到运营商的标识符。我
所以我需要在Haskell中创建一个Set数据类型。 所以,我的问题的第一部分,我需要定义 type Set a = ...
我把它设置为 type Set a = Set [a]
因为套装也只是α的名单,对不对? 或者,将正确的方式做到这一点是 type Set a = ([a])
然后,在接下来的一部分,我需要实现的功能 setSuchThat :: (a -> Bool) ->