如何在compdata中创建值

时间:2015-10-09 18:38:23

标签: haskell

我已经获得了以下compdata示例代码

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TemplateHaskell #-}

module Web.Rusalka.Hello (
  iB, iV, Z) where

import Data.Comp
import Data.Comp.Ops
import Data.Comp.Show ()
import Data.Comp.Derive

data B e = B Bool
data V a e = V a

type Z a = Term (B :+: V a)

$(derive [makeFunctor, makeTraversable, makeFoldable,
          makeEqF, makeShowF, smartConstructors, smartAConstructors,
          makeArbitrary, makeArbitraryF]
         [''B, ''V])

(你会注意到,事实上,Z中的所有内容都是叶子节点。)

现在,据我所知,这创造了两个函数,iB和iV,可用于创建(Z a)s。但是,我无法想象我的生活 如何创建,例如(Z Int)。我需要投入什么? (或者我误解了什么?)

1 个答案:

答案 0 :(得分:1)

iB True :: Z IntiV (1 :: Int) :: Z Int在此模块中生成有效的可打印表达式。