diff --git a/copilot-language.cabal b/copilot-language.cabal
--- a/copilot-language.cabal
+++ b/copilot-language.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                copilot-language
-version:             0.3
+version:             0.4
 synopsis:            A Haskell-embedded DSL for monitoring hard real-time
                      distributed systems.
 description:         Blah blah blah...
diff --git a/src/Copilot/Language/Analyze.hs b/src/Copilot/Language/Analyze.hs
--- a/src/Copilot/Language/Analyze.hs
+++ b/src/Copilot/Language/Analyze.hs
@@ -15,7 +15,7 @@
 
 import Copilot.Core (DropIdx)
 import qualified Copilot.Core as C
-import Copilot.Language.Stream (Stream (..), FunArg (..))
+import Copilot.Language.Stream (Stream (..), Arg (..))
 import Copilot.Language.Spec
 import Copilot.Language.Error (badUsage)
 
@@ -90,8 +90,8 @@
   analyzeExpr refStreams e0 >> mapM_ analyzeTriggerArg args
 
   where
-  analyzeTriggerArg :: TriggerArg -> IO ()
-  analyzeTriggerArg (TriggerArg e) = analyzeExpr refStreams e
+  analyzeTriggerArg :: Arg -> IO ()
+  analyzeTriggerArg (Arg e) = analyzeExpr refStreams e
 
 --------------------------------------------------------------------------------
 
@@ -130,7 +130,7 @@
                         Nothing -> return ()
                         Just e  -> go seenExt nodes' e
         checkArgs = case seenExt of 
-                      NoExtern -> mapM_ (\(FunArg a) -> 
+                      NoExtern -> mapM_ (\(Arg a) -> 
                                              go SeenFun nodes' a) args
                       SeenFun  -> throw NestedExternFun
                       SeenArr  -> throw NestedArray
@@ -284,7 +284,7 @@
   triggerExts :: ExternEnv -> Trigger -> IO ExternEnv
   triggerExts env (Trigger _ guard args) = do
     env' <- collectExts refStreams guard env 
-    foldM (\env'' (TriggerArg arg_) -> collectExts refStreams arg_ env'')
+    foldM (\env'' (Arg arg_) -> collectExts refStreams arg_ env'')
           env' args
 
 collectExts :: C.Typed a => IORef Env -> Stream a -> ExternEnv -> IO ExternEnv
@@ -312,9 +312,9 @@
         env' <- case me of
                   Nothing -> return env 
                   Just e  -> go nodes env e
-        env'' <- foldM (\env'' (FunArg arg_) -> go nodes env'' arg_)
+        env'' <- foldM (\env'' (Arg arg_) -> go nodes env'' arg_)
                    env' args 
-        let argTypes = map (\(FunArg arg_) -> getSimpleType arg_) args 
+        let argTypes = map (\(Arg arg_) -> getSimpleType arg_) args 
         let fun = (name, getSimpleType stream) 
         return env'' { externFunEnv  = fun : externFunEnv env''
                      , externFunArgs = (name, argTypes) : externFunArgs env''
diff --git a/src/Copilot/Language/Operators/Extern.hs b/src/Copilot/Language/Operators/Extern.hs
--- a/src/Copilot/Language/Operators/Extern.hs
+++ b/src/Copilot/Language/Operators/Extern.hs
@@ -17,7 +17,6 @@
   , externI64
   , externF
   , externD
-  , FunArg
   , externFun
   , externArray
   , externArrayB
@@ -31,7 +30,7 @@
   , externArrayI64
   , externArrayF
   , externArrayD
-  , funArg
+  , funArg -- ^ Deprecated.
   ) where
 
 import Copilot.Core (Typed)
@@ -46,15 +45,16 @@
 extern :: Typed a => String -> Maybe [a] -> Stream a
 extern = Extern
 
-externFun :: Typed a => String -> [FunArg] -> Maybe (Stream a) -> Stream a
+externFun :: Typed a => String -> [Arg] -> Maybe (Stream a) -> Stream a
 externFun = ExternFun
 
 externArray :: (Typed a, Typed b, Integral a) 
             => String -> Stream a -> Size -> Maybe [[b]] -> Stream b
 externArray = ExternArray
 
-funArg :: Typed a => Stream a -> FunArg
-funArg = FunArg
+-- | Deprecated.
+funArg :: Typed a => Stream a -> Arg
+funArg = Arg
 
 --------------------------------------------------------------------------------
 
diff --git a/src/Copilot/Language/Reify.hs b/src/Copilot/Language/Reify.hs
--- a/src/Copilot/Language/Reify.hs
+++ b/src/Copilot/Language/Reify.hs
@@ -17,7 +17,7 @@
 --import Copilot.Language.Reify.Sharing (makeSharingExplicit)
 import Copilot.Language.Analyze (analyze)
 import Copilot.Language.Spec
-import Copilot.Language.Stream (Stream (..), FunArg (..))
+import Copilot.Language.Stream (Stream (..), Arg (..))
 
 import Prelude hiding (id)
 import Data.IORef
@@ -83,8 +83,8 @@
 
   where
 
-  mkTriggerArg :: TriggerArg -> IO Core.UExpr
-  mkTriggerArg (TriggerArg e) = do
+  mkTriggerArg :: Arg -> IO Core.UExpr
+  mkTriggerArg (Arg e) = do
       w <- mkExpr refMkId refStreams refMap e
       return $ Core.UExpr typeOf w
 
@@ -181,8 +181,8 @@
 
       ------------------------------------------------------
 
-  mkFunArg :: FunArg -> IO Core.UExpr
-  mkFunArg (FunArg e) = do
+  mkFunArg :: Arg -> IO Core.UExpr
+  mkFunArg (Arg e) = do
       w <- mkExpr refMkId refStreams refMap e
       return $ Core.UExpr typeOf w
 
diff --git a/src/Copilot/Language/Spec.hs b/src/Copilot/Language/Spec.hs
--- a/src/Copilot/Language/Spec.hs
+++ b/src/Copilot/Language/Spec.hs
@@ -16,7 +16,6 @@
   , observer
   , observers
   , Trigger (..)
-  , TriggerArg (..)
   , triggers
   , trigger
   , arg
@@ -67,50 +66,26 @@
 --------------------------------------------------------------------------------
 
 data Observer where
-  Observer
-    :: Typed a
-    => String
-    -> Stream a
-    -> Observer
+  Observer :: Typed a => String -> Stream a -> Observer
 
 --------------------------------------------------------------------------------
 
-observer 
-  :: Typed a
-  => String
-  -> Stream a
-  -> Spec
+observer :: Typed a => String -> Stream a -> Spec
 observer name e = tell [ObserverItem $ Observer name e]
 
 --------------------------------------------------------------------------------
 
 data Trigger where
-  Trigger
-    :: Core.Name
-    -> Stream Bool
-    -> [TriggerArg]
-    -> Trigger
-
---------------------------------------------------------------------------------
-
-data TriggerArg where
-  TriggerArg
-    :: Typed a
-    => Stream a
-    -> TriggerArg
+  Trigger :: Core.Name -> Stream Bool -> [Arg] -> Trigger
 
 --------------------------------------------------------------------------------
 
-trigger
-  :: String
-  -> Stream Bool
-  -> [TriggerArg]
-  -> Spec
+trigger :: String -> Stream Bool -> [Arg] -> Spec
 trigger name e args = tell [TriggerItem $ Trigger name e args]
 
 --------------------------------------------------------------------------------
 
-arg :: Typed a => Stream a -> TriggerArg
-arg = TriggerArg
+arg :: Typed a => Stream a -> Arg
+arg = Arg
 
 --------------------------------------------------------------------------------
diff --git a/src/Copilot/Language/Stream.hs b/src/Copilot/Language/Stream.hs
--- a/src/Copilot/Language/Stream.hs
+++ b/src/Copilot/Language/Stream.hs
@@ -2,15 +2,15 @@
 -- Copyright © 2011 National Institute of Aerospace / Galois, Inc.
 --------------------------------------------------------------------------------
 
--- |
+-- | Abstract syntax for streams and operators.
 
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE Rank2Types #-}
 
 module Copilot.Language.Stream
-  ( Stream (..)
-  , FunArg (..)
+  ( Stream (..) 
+  , Arg (..) 
   ) where
 
 import Copilot.Core (Typed, typeOf)
@@ -30,7 +30,7 @@
   Extern      :: Typed a
               => String -> Maybe [a] -> Stream a
   ExternFun   :: Typed a 
-              => String -> [FunArg] -> Maybe (Stream a) -> Stream a
+              => String -> [Arg] -> Maybe (Stream a) -> Stream a
   ExternArray :: (Typed a, Typed b, Integral a)
               => String -> Stream a -> Int -> Maybe [[b]] -> Stream b
   Local       :: (Typed a, Typed b) 
@@ -46,8 +46,8 @@
 
 --------------------------------------------------------------------------------
 
-data FunArg where
-  FunArg :: Typed a => Stream a -> FunArg
+data Arg where
+  Arg :: Typed a => Stream a -> Arg
 
 --------------------------------------------------------------------------------
 
