我使用函数类型混淆了.
假设我想实现一个字典,当给出a和b时返回Maybe b.
type Dict a b = a->Maybe b
Run Code Online (Sandbox Code Playgroud)
如何为此字典实现插入功能?
insertDict :: (Eq a) => a -> b -> (Dict a b)-> (Dict a b)
Run Code Online (Sandbox Code Playgroud)
我想出了以下的事情
insertDict x y mydict = \a->Just y
Run Code Online (Sandbox Code Playgroud)
但它不正确,将丢弃以前的字典.
我正在研究一个涉及对Haskell进行程序分析的项目.我认为在Cminusminus(C--)级别实施程序分析是个好主意.我知道,使用ghc,Haskell首先被编译为core然后是stg然后是cmm.然后将生成的cmm转换为可执行文件.
为了正确理解和使用C--,我需要一个cminusminus(C--)编译器.但是,根据我的信息,编译为C--的编译器很久就停止了,并且没有编译到x86_64(例如QuickC--).我错过了什么吗?是否有一个编译为x64的C--编译器?
另外,2008-09之后Cminusminus还有进一步的工作吗?有没有Cminusminus社区?
编辑1:根据这个 GHC可以编译非常基本的cmm(cmm是c - 的c - 的味道,它与c--有一些不同,但是根据我的项目的需要,我应该更关心cmm)文件.此外,-ddump-cmm包含许多不能被ghc解析的项目.
当我Functor为Maybe 定义以下内容时,它可以正常工作
instance Functor Maybe where
fmap func Nothing = Nothing
fmap func (Just val) = Just (func val)
Run Code Online (Sandbox Code Playgroud)
我已将我的数据类型定义为:
type Vec2 = (Double, Double)
data Body = Body Vec2 Vec2 Double (Color3 Double) deriving(Eq,Ord, Show, Foldable)
Run Code Online (Sandbox Code Playgroud)
但是当我functor为它定义以下内容时:
instance Functor Body where
fmap func (Body pos vel mass clr) = Body (func pos vel mass clr)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
期待的'* - >*',但身体有点*
请确定问题是什么?
假设我有一些 C 代码,比如说,printf("A");我如何根据某个编译时参数将它重复 N 次,其中 N 在该编译器参数中传递。例如gcc -D print=N
同样,有没有一种方法可以根据编译时参数/标志传递循环的范围?