我有这段代码:
markovNextSS :: (RandomGen g, Ord a) => (MarkovChain a, a, g) -> (MarkovChain a, a, g)
markovNextSS (chain, prev, gen) = let
(gen', roll) = randomR (0.0, 1.0) gen
-- expected to get a (Double, g) above,
-- but GHC 7.8.3 says that this is a (g, g) instead
next = markovNext chain prev roll
in (chain, next, gen')
Run Code Online (Sandbox Code Playgroud)
为什么GHC会推断上面的错误类型,特别是如果RandomGen不是一个实例Random?
我在utf8-string包中读到ghc默认应该支持utf8.我甚至在某处写过,现在使用的是我的默认代码页.
尽管如此,一个简单的代码不会执行.
writeFile "asd.txt" "?l???"
Run Code Online (Sandbox Code Playgroud)
回报
*** Exception: filenames.txt: commitBuffer: invalid argument (invalid character)
Run Code Online (Sandbox Code Playgroud)
如何执行此代码?
我有这种类型.但它无法推断出从goalequals isGoal的第一个变量类型返回的类型.如何解决这个问题?
{-# LANGUAGE TypeFamilies, FlexibleContexts #-}
class Problem p where
type State p :: *
data Action p :: *
goal :: Eq (State p) => State p
goal = undefined
isGoal :: Eq (State p) => State p -> Bool
isGoal s = s == goal
Run Code Online (Sandbox Code Playgroud)
结束这样做
class Problem p where
type State p :: *
data Action p :: *
goal :: p -> State p
goal = undefined
isGoal :: Eq (State p) …Run Code Online (Sandbox Code Playgroud) 最近我试图安装llvm-general-3.5.1.0软件包大约一个星期.基本上我收到此错误:链接.我的情况完全相同.Windows 10,ghc 7.10.2,cabal 1.22.4.0.我用cmake从源代码安装了llvm 3.5.2,一切都很顺利.在llvm/lib目录中,我有*.lib文件(例如LLVMAnalysis.lib).
但不知何故,cabal无法看到这些库并给出了这个令人沮丧的错误:
配置llvm-general-3.5.1.0 ... setup.exe:缺少对外部库的依赖:*缺少C库:LLVMLTO,LLVMObjCARCOpts,LLVMLinker,LLVMipo,LLVMVectorize,LLVMBitWriter,LLVMCppBackendCodeGen,LLVMCppBackendInfo,LLVMTableGen,LLVMDebugInfo,LLVMOption,LLVMX86Disassembler, LLVMX86AsmParser,LLVMX86CodeGen,LLVMSelectionDAG,LLVMAsmPrinter,LLVMX86Desc,LLVMX86Info,LLVMX86AsmPrinter,LLVMX86Utils,LLVMJIT,LLVMIRReader,LLVMAsmParser,LLVMLineEditor,LLVMMCAnalysis,LLVMMCDisassembler,LLVMInstrumentation,LLVMInterpreter,LLVMCodeGen,LLVMScalarOpts,LLVMInstCombine,LLVMTransformUtils,LLVMipa,LLVMAnalysis,LLVMProfileData,LLVMMCJIT,LLVMTarget, LLVMRuntimeDyld,LLVMObject,LLVMMCParser,LLVMBitReader,LLVMExecutionEngine,LLVMMC,LLVMCore,LLVMSupport这个问题通常可以通过安装系统包,提供这些库解决(你可能需要"-dev"版本).如果库已经安装但是在非标准位置,那么您可以使用标志--extra-include-dirs =和--extra-lib-dirs =来指定它们的位置.
我真的想在我的Windows上使用这个软件包,但似乎没有任何工作(我尝试了所有的东西,如--extra-lib-dirs,并与MinGW和VS一起编译 - 同样的问题).
我不能接受它不会安装的事实.我的意思是,必须有一些方法来修复此cabal包中的Setup.hs.有没有人知道在这种情况下cabal有什么问题,我该如何尝试解决这个问题?我不知道cabal究竟是如何运作的,也许有这种知识的人会有想法?或者也许有一种方法可以做到这一点没有cabal?
有一个清单 lc
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info lc
lc :: IO [Int] -- Defined at <interactive>:2:5
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> length <$> lc
1704399
Run Code Online (Sandbox Code Playgroud)
我想知道这个列表的基数,所以我尝试通过执行以下操作将此列表转换为集合:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> import Data.Set as Set
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> let sc = Set.fromList <$> lc
Run Code Online (Sandbox Code Playgroud)
但是,当我试图计算基数时,我得到了错误:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> length <$> sc
*** Exception: Prelude.!!: index too large
Run Code Online (Sandbox Code Playgroud)
类型sc是正确的:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info sc
sc :: …Run Code Online (Sandbox Code Playgroud) 我希望定义一个新类的实例,因为它Bool没有创建部分函数Finite 2,但它不起作用.
我的代码:
-- SO test case, re: my HasFin instance for Bool.
--
-- David Banas <capn.freako@gmail.com>
-- February 9, 2018
{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TypeFamilies #-}
module Bogus.BoolHasFin where
import GHC.TypeLits
import Data.Finite
import Data.Finite.Internal (Finite(..))
class KnownNat (Card a) => HasFin a where
type Card a :: Nat
toFin :: a -> Finite (Card a)
unFin :: Finite (Card …Run Code Online (Sandbox Code Playgroud) haskell新手,当我尝试模式匹配非空列表时,我一直遇到这个神秘的错误
码:
type Bits = [Bool]
nor :: Bits -> Bits -> Bits
nor [] [_:__] = error "mismatched length"
nor [_:__] [] = error "mismatched length"
nor [] [] = []
nor (x:xs) (y:ys) = (norBit x y):nor xs ys
where norBit x y = if x == True || y == True then False else True
main = do
print (nor [True] [False])
Run Code Online (Sandbox Code Playgroud)
错误:
gates.hs:4:9:
Couldn't match expected type ‘Bool’ with actual type ‘[t0]’
In the pattern: _ …Run Code Online (Sandbox Code Playgroud) 是否可以在.ghci文件中添加注释?
例如
:set +r # https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#faq-and-things-to-watch-out-for
Run Code Online (Sandbox Code Playgroud)
这对于记录和切换行为都很有用.
我有想法在Haskell中实现自己的小音乐理论模块。
从便笺(Note)开始是有意义的,然后我就遇到了这个讨厌的句法问题,我不知道真正的Haskellers是如何处理它的。
data Note = Sharp NoteS | Flat NoteF deriving (Show)
data NoteS =
C | SC | D | SD | E | F | SF | G | SG | B
deriving (Ord,Show,Eq)
data NoteF =
C | FD | D | FE | E | F | FG | G | FB | B
deriving (Ord,Show,Eq)
instance Eq Note where
(==) (NoteS n1) (NoteS n2) = n1 == n2
(==) (NoteF n1) (NoteF n2) …Run Code Online (Sandbox Code Playgroud) 我试图实现多态元组映射并最终在 GHCi 中编写了以下代码:
data MaxS = MaxS
class Strategy action input result | input -> result where
work :: action -> input -> result
instance (Ord a) => Strategy MaxS (a, a, a) a where work _ (a, b, c) = max a (max b c)
f :: (Strategy action input result) => action -> input -> result ; f a i = work a i
f MaxS (1, 2, 3)
<interactive>:91:1: error:
* No instance for (Ghci13.Strategy
MaxS (Integer, …Run Code Online (Sandbox Code Playgroud)