我已经为我的Main.hs模块实现了一个简单的加载器用于haskell插件.我现在使用的唯一功能是load来自这个网站
查看我编译的应用程序大小,向我展示了x86架构上超过53 MB的可执行文件.我知道GHC的大部分内容都是链接的(由于haskell-source-to-binary-plugin功能),但这对我的目的来说太过分了.
是否有官方批准的方式来削减额外的功能,只保留(dyn-)load?
说我有一个数据类型
data Interval :: Nat -> Nat -> * where
Go :: Interval m n -> Interval m (S n)
Empty :: SNat n -> Interval n n
Run Code Online (Sandbox Code Playgroud)
这些是半(右)开放间隔.Nat是标准的归纳自然,SNat是相应的单体.
现在我想得到Nat一个给定间隔长度的单例:
intervalLength :: Interval n (Plus len n) -> SNat len
intervalLength Empty = Z
intervalLength (Go i) = S (intervalLength i)
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为该Plus函数不是单射的.我可能会定义它
intervalLength :: Interval m n -> SNat (Minus n m)
Run Code Online (Sandbox Code Playgroud)
但我认为这需要一些引理(以及其他限制).而且,我的间隔出现在前一种形状中.
背景:我试图在Omega中做到这一点并且它不起作用(我提交的omega bug)
这些问题怎么可能被修改过的类型控制器破解?供应的RHS能否对LHS模式的类型方程提出至关重要的暗示,以便非内射性抵消?
Agda程序员如何解决这些问题?
我有
sample :: MVar a -> IO [a]
sample v = do
a <- takeMVar v
pure (a:unsafePerformIO (sample v))
Run Code Online (Sandbox Code Playgroud)
这似乎是unsafePerformIO对我的合法使用.但我很想知道如何避免它!是否有这种用途的模式?