我想要一个函数,它接受来自 Eq 的 a 列表和来自 Int 的 b 列表并返回 a 列表。我认为它应该是这样的:multiIndex :: (Eq a, Int b) => [a] -> [b] -> [a]但我收到以下错误消息:
Expected kind ‘* -> Constraint’, but ‘Int’ has kind ‘*’
In the type signature:
multiIndex :: (Eq a, Int b) => [a] -> [b] -> [a] typecheck
Run Code Online (Sandbox Code Playgroud)
整个功能将是:
multiIndex :: (Eq a, Int b) => [a] -> [b] -> [a]
multiIndex [] _ = []
multiIndex _ [] = []
multiIndex toBeExtracted values@(y:ys) = (toBeExtracted !! …Run Code Online (Sandbox Code Playgroud) 我有以下数据结构和功能:
data BTree a = BLeaf | BNode (BTree a) a (BTree a) deriving (Show, Eq)
freshNodesS :: BTree String -> State [String] (BTree String)
freshNodesS BLeaf = return BLeaf
freshNodesS (BNode l m r) = do l' <- freshNodesS l
let m' = getFresh m s
let s' = m : s
r' <- freshNodesS r s'
return (BNode l' m' r')
Run Code Online (Sandbox Code Playgroud)
有一个问题,我实际上想使用freshNodesS l应该给出输出的状态(BTree String, [String]),但是在我不能使用的 do 块中(l', s) <- freshNodesS l,我看到的唯一选择是将所有内容都放在 lambda …
我正在尝试学习如何使用Haskell,现在我必须制作一个程序,该程序使用整数n和字符串k,并且该字符串的每个字母都将在字母表的右侧移动n个位置。现在,我有了下一个代码:
import Data.Char
main = do
x <- read getLine :: Int
y <- getLine
caesar x y
result :: String
rotate :: Int -> Char -> [Char]
rotate a b = [chr ((a + ord b) `mod` ord 'z' + ord 'a')]
caesar :: Int -> String -> ()
caesar moving text= do
rotatespecific moving text 0
putStrLn result
rotatespecific :: Int -> String -> Int -> ()
rotatespecific moving text place = do
if place < length text …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作以下功能:
repcountIORIban :: IORef -> Int -> Int -> Int -> Int -> Lock -> IORef -> Lock -> Int -> Int -> IO ()
repcountIORIban count number lower modulus amountthreads lock done lock2 difference rest = do
if rest > number
then let extra = 1
else let extra = 0
if number + 1 < amountthreads
then
forkIO $ realcountIORIban(count lower (lower + difference + extra - 1) modulus lock done lock2)
repcountIORIban (count (number + 1) (lower …Run Code Online (Sandbox Code Playgroud)