下面是Haskell的代码:
class Fooable a where
foo :: a -> a
instance Fooable (a, a) where
foo = ...
如果没有FlexibleInstances扩展,这样的代码将不会在传统的Haskell中编译。错误信息会说:
Illegal instance declaration for ‘Fooable (a, a)’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct ty
在的第4页,List的定义如下
infixr 40 _::_
data List (A : Set) : Set where
[] : List A
_::_ : A -> List A -> List A
我很难把头绕到最后一行。我以前学过一些Haskell,所以我很熟悉反操作符。
那么,要么您有一个类型为List A的空列表,要么使用A -> List A -> List A类型的函数::创建一个新的值,该函数接受一些A类型的元素和一个A类型的列表,并返回一个新的列表?
这似乎是直觉,但这并没有映射到我所知道的递归数据类型定义的概念(来自haskell)。
以下内容在哈斯克尔不起作用-
{-# LANGUAGE GADTs, DataKinds, TypeFamilies, UndecidableInstances,
RankNTypes, PolyKinds #-}
import Data.Kind
data Payload :: (f :: a -> Type) -> (e :: a) -> Type where
MkPayload :: (e :: a) -> (t :: f e) -> Payload f e
payload :: Payload f e -> f e
我有点困惑,需要有人帮我理清。让我概述一下我目前的理解:
其中,E是一个内部函数,而A是某些类别:
E : A -> A.
由于Haskell中的所有类型和态射都属于Hask范畴,所以在Haskell中没有任何函子也是内函子?F : Hask -> Hask。
我有一种很好的感觉,我错了,不知怎么地把这件事简单化了,我希望有人能告诉我我是个多傻的人谢谢。
目前,我正致力于用JavaScript开发一个解析Haskell语言的解析器。我正在研究Esprima.JS,并希望在它的基础上构建一个解析Haskell Language.As的解析器。根据我的理解,我需要从基本部分开始,比如数字(它们在Haskell语言中的使用方式)运算符,然后是高级选项。我对它非常陌生,任何资源方面的帮助都会对我有用
我遵循Esprima.js中的这个模式
Token={
//Haskell
PosToken:10
//Should i have to declare all tokens of Haskell over here
我试图使用:cabal install hlint在Windows上安装hlint,并得到以下错误:
Preprocessing executable 'hlint' for hlint-1.8.50..
Building executable 'hlint' for hlint-1.8.50..
<no location info>: warning: [-Wmissing-home-modules]
These modules are needed for compilation but not listed in your .c
我正在学习Haskell,但我还没有找到答案。
为什么要像示例中那样使用庄重的重音来将mod函数传递给映射?我见过一些其他函数不需要它的情况。
map (`mod` 3) [1..6] -- result is [1,2,0,1,2,0]
如果我没有严肃的口音通过,结果就完全不同了。
map (mod 3) [1..6] -- result is [0,1,0,3,3,3]
在GHC解释器中键入以下内容
let describe' all@([x] ++ [y]) = "The first letter of " ++ all ++ " is " ++ [x]
收益率
模式中的解析器错误:x ++ y
为什么Haskell无法将模式all@([x] ++ [y])与"HI"或[1,2]之类的表达式相匹配
尝试学习如何使用Data.Binary,在这里遇到了一个障碍:
D:\Projects\haskell\serialize\ex1.hs:114:26:
Couldn't match expected type `bytestring-0.9.1.10:Data.ByteString.Lazy.Internal.ByteString'
with actual type `L.ByteString'
Expected type: Int
-> bytestring-0.9.1.1
我刚从Python开始。以前有过Haskell。在Haskell,我大部分时间都在列表上工作。在Python中,我想这样做。
我有一份清单:
l = [1,2,3,4]
如何在列表中添加这4个元素,从而得到10个结果(1+2+3+4)
我需要一个递归函数和一个迭代(不像迭代那样干净和稳定,但无论如何)。
我在Haskell做了这件事:
sum [] = 0
sumlist(x:xs) = x + sumlist xs
在Python中,我尝试了这样的方法:
def sumlist(l)
if l == 0: #or Nil, i do not know
result 0
关于Haskell库中的函数hoistfree,我有一些问题。给定两个函子之间的一个变换f,hoistfree f在相应的自由单数之间产生一个态射。这是它的定义。
hoistFree :: Functor g => (forall a. f a -> g a) -> Free f b -> Free g b
hoistFree _ (Pure a) = Pure a
hoistFree f (Free as) = Free (hoistFree f <$> f as)
问题1如何知道<$>是与g相关的映射,而不是与f、Free f或Free g
我有一个非常简单的Makefile (它只是递归地调用另一个子目录make):
all:
cd addons/godot-haskell-plugin && make && cd -
run:
cd addons/godot-haskell-plugin && make run && cd -
我想做的是
检查外壳变量ENV_VAR是否已定义。
如果是的话,就像往常一样运行Makefile (也就是说,ENV_VAR=1 make all应该和上面的make all完全一样)。
如果不是,则提示用户一条
模板Haskell能否找到类型类中声明的关联类型同义词的名称和/或声明?我原以为会做我想做的事,但它似乎并没有提供所有必要的信息。它用于获取函数类型签名:
% ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? for help
...
Prelude> -- I'll be inserting line breaks and whitespace for clarity
Prelude> -- in all GHCi output.
Prelude> :set -XTemplateHaskell
Pr
我制作了一个简短的Haskell程序,它公开了C或Python的函数。遵循的信,这对出口Ints来说是很好的。
想要导出String并使程序:
module Adder where
import CString
adder :: Int -> Int -> IO CString
adder x y = newCString(show(x+y))
foreign export ccall adder :: Int -> Int -> IO CString
当我这样做时,这是可以编译的: ghc adder.hs,但是当链接到在中创建一个dll时,它会失败。
-