小编Joe*_*nge的帖子

Haskell 中具有两种不同变量类型的重载函数

我想要一个函数,它接受来自 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)

haskell

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

在 Haskell 的 do 块中使用 let 中的状态

我有以下数据结构和功能:

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 state-monad

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

如何在Haskell的另一个函数中将函数的结果用作变量?

我正在尝试学习如何使用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)

haskell

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

在 Haskell 中,do 块中的 if/then/else 中的语法如何工作

我正在尝试制作以下功能:

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)

haskell

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

标签 统计

haskell ×4

state-monad ×1