小编dfe*_*uer的帖子

我应该如何处理配料数据库中的计量单位?

我刚开始用MySQL/MariaDB学习SQL,我认为一个好的项目是为我(实际)当地的比萨饼店建立一个营养和价格信息数据库.我的整体概念:

  1. 一个表格提供有关成分营养信息的信息.

  2. 一张成分价格信息表.

  3. 一份食谱表,显示每个披萨中每种成分的含量.

我有几个问题:

  1. 营养信息的不同成分和方面通常使用不同的单位:每杯盐的毫克钠,每液体盎司酱的毫克钠,每磅面粉的蛋白质克数,每磅面粉的卡路里等.我该如何处理?从理论上讲,最干净的方法是测量除了卡路里以毫克为单位的所有营养素,以及所有成分(千克),但后来我需要一张密度表(并不总是随时可用)以及一些方法来隔离用户那个烂摊子.并且卡路里仍然是偏执的.

  2. 披萨,面团和酱汁的两个关键方面,作为(几乎)各种比萨饼的"子食谱".处理这个问题的正确方法是什么?

mysql sql database-design

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

如何在有文化的Haskell脚本中启用GHC扩展?

我正在研究一个有文化的Haskell脚本,该脚本定义了一个Grammar数据类型,该数据类型将加载到我的Mac上的GHCI(v.7.8.3)中.我试图在我的脚本中打开名为KindSignatures和GADT的语言扩展(我完全不熟悉这些)但我被建议包括该行

{-# LANGUAGE KindSignatures, GADTs #-}
Run Code Online (Sandbox Code Playgroud)

在我的脚本的顶部.但是我收到一条错误消息:

Grammars.lhs:5:3:
    Illegal kind signature ‘Grammar’
      (Use KindSignatures to allow kind signatures)
    In the data declaration for ‘Grammar’
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?还有关于KindSignatures或GADT的任何文档吗?我一直找不到多少.

haskell ghci

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

什么是代表自由团体的好方法?

很容易表示自由岩浆(二元叶子树),自由半群(非空列表)和自由幺半群(列表),并且不难证明它们实际上是他们声称的那样.但自由团体似乎更棘手.似乎至少有两种使用常规List (Either a)表示的方法:

  1. 在类型中编码要求,如果你有,Left a :: Right b :: ...那么Not (a = b)相反.构建这些似乎有点困难.
  2. 研究等价关系,允许任意插入/删除Left a :: Right a :: ...对(以及相反的方式).表达这种关系似乎非常复杂.

其他人有更好的主意吗?

编辑

我刚刚意识到唯一的答案所使用的选项(1)根本无法在最常规的设置中工作.特别是,如果不实施可判定的平等,就无法定义组操作!

编辑2

我应该首先想到Google.看起来Joachim Breitner 几年前在Agda做过,从他的介绍性描述来看,看起来他从选项1开始,但最终选择了选项2.我想我会自己尝试,如果我太卡住了我会看看他的代码.

agda dependent-type idris

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

是否有针对Applicative的翻转操作符?

运营商

$
. or <<<
<$>
<*>
=<<
<=<
Run Code Online (Sandbox Code Playgroud)

一起走得很好,每个人在某种意义上将左边的东西应用到右边的东西上.在考虑另一种方式时,我们有

&
>>>
>>=
>=>
Run Code Online (Sandbox Code Playgroud)

但有翻转的版本<$><*>

haskell applicative

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

什么=>在类型签名中意味着什么?

我刚开始学习一个Haskell,我在一个例子中看到了这个没有解释:

tell :: (Show a) => [a] -> String
Run Code Online (Sandbox Code Playgroud)

这是什么意思,特别是=>?我知道如果我替换->或删除它将无法工作,但我真的不明白为什么.

haskell symbols

5
推荐指数
3
解决办法
731
查看次数

固定点代表性的bifunctors

Edward Kmett的实验角色包提供了各种用于解除强制的工具,其中一些是我在这个问题的最后粘贴的.包中的关键类是

class Representational (t :: k1 -> k2) where
  -- | An argument is representational if you can lift a coercion of the argument into one of the whole
  rep :: Coercion a b -> Coercion (t a) (t b)
Run Code Online (Sandbox Code Playgroud)

鉴于类型

newtype Fix p a = In {out :: p (Fix p a) a}
Run Code Online (Sandbox Code Playgroud)

我希望能写出类似的东西

instance Representational p => Representational (Fix p)
Run Code Online (Sandbox Code Playgroud)

我相信以下内容应该有效,除了一件丢失的内容.我也有点担心,bar可能会严格到将一切都扔进一个无限循环.

-- With {-# LANGUAGE PolyKinds, ScopedTypeVariables, etc.)
import Data.Type.Coercion
import Data.Coerce
import …
Run Code Online (Sandbox Code Playgroud)

haskell coercion ghc bifunctor fixpoint-combinators

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

为什么我的程序在播放光泽动画后立即退出?

我正在学习如何使用 Gloss 库在 Haskell 中制作一些动画。

考虑下面的代码,它对一个圆进行动画处理,使其半径随着时间的推移而缩小和扩大。

import Graphics.Gloss
import Graphics.Gloss.Interface.Pure.Game

type Radius = Float
type RealTime   = Float

data World = World Radius RealTime

main :: IO ()
main
 = do   let initWorld = World 100.0 0
        let windowSize = (800,800)
        let windowPosition = (200,200)
        putStrLn "Before play"
        play (InWindow "Wobbling Circle" windowSize windowPosition)
              white 40 initWorld renderWorld handleEvent stepWorld
        putStrLn "After play"

renderWorld :: World -> Picture
renderWorld (World rad rtime ) = Pictures [ Circle rad ]

handleEvent …
Run Code Online (Sandbox Code Playgroud)

haskell gloss

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

理解令人困惑

我一直在考虑是否有一些可以添加的方法,以便Traversable在昂贵的仿函数存在的情况下使其更便宜.灵感来自于Control.Lens.Traversal.confusing使用特殊Applicative功能来做类似的事情.

confusing :: Applicative f => LensLike (Curried (Yoneda f) (Yoneda f)) s t a b -> LensLike f s t a b
Run Code Online (Sandbox Code Playgroud)

不幸的是,confusing真正实现其名称 - 我不明白它实际上在做什么.特别是,我没有直觉Curried.

此外,confusing它具有CPS风味,这表明它可能对我的目的来说太严格了.Yoneda可以换掉Coyoneda来增强懒惰,但我不知道该怎么办Curried.

haskell haskell-lens traversable

5
推荐指数
0
解决办法
129
查看次数

榆树:我如何在elm-repl中找出Elm表达式或子表达式的类型?

如何在elm-repl中找出Elm表达式或子表达式的类型?

Haskell :type:t等同于Elm REPL?

elm

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

a b。两年后的Hoogle结果不同吗?

我正在跟踪大约两年前录制的视频。演讲者输入Either a b -> IO b了公共Hoogle搜索输入,结果包含(其中包括):

either :: (a -> c) -> (b -> c) -> Either a b -> c
Run Code Online (Sandbox Code Playgroud)

如果我今天尝试一下,找不到此结果,这是一个遗憾。找到类似的结果,例如

fromEither :: (Exception e, MonadIO m) => Either e a -> m a
Run Code Online (Sandbox Code Playgroud)

但它们不易使用。

如何解释呢?Hoogle搜索算法变得更严格了吗?有没有改变?

haskell either hoogle

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