diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,6 @@
+Code using X-Dsp should be run with the monomorphism restriction
+disabled (via the flag -XNoMonomorphismRestriction or similar).
+
+If you want to use explicit type signatures, be prepared for very long class
+contexts.  Various functions are provided ('a', 'k', 'i') to specify types
+where they would otherwise be unable to be inferred.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/src/Language/XDsp/Implementations/Csound.hs b/src/Language/XDsp/Implementations/Csound.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Implementations/Csound.hs
@@ -0,0 +1,5582 @@
+{-# LANGUAGE
+     NoMonomorphismRestriction
+    ,DoRec
+    ,ExtendedDefaultRules
+    ,TypeFamilies
+    ,DeriveDataTypeable
+    ,DeriveFunctor
+    ,GeneralizedNewtypeDeriving
+    ,ScopedTypeVariables
+    ,MultiParamTypeClasses
+    ,FlexibleInstances
+    ,TupleSections
+    ,OverlappingInstances
+    ,TypeSynonymInstances #-}
+
+module Language.XDsp.Implementations.Csound (
+  S (..)
+ ,BusType (..)
+ ,HostOut (..)
+ ,RType
+ ,defaultRType
+ ,unifyCsd
+ ,writeHeader
+ ,makeInstrument
+ ,TList
+ ,unTList'
+ ,module Language.XDsp.Semantics.CsoundExt
+)
+
+where
+
+import           Language.XDsp.Semantics
+import           Language.XDsp.Semantics.CsoundExt hiding (CsOscil (..), CsOscili (..), CsSum (..))
+import qualified Language.XDsp.Semantics.CsoundExt as CSE
+
+import           Data.Char
+import           Data.Data
+import           Data.List (intersperse, intercalate)
+import qualified Data.Map as M
+import           Data.Maybe (fromMaybe, catMaybes)
+import qualified Data.Set as S
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as TL
+import           Data.TypeLevel.Num ((:>=:), Nat, toInt)
+import           Control.Monad.RWS
+import           Control.Applicative
+import           Control.Arrow
+
+import           Text.Printf
+
+-- ---------------------------------
+-- ---------------------------------
+
+-- |Initial csound pretty-printer
+
+data CVar =
+    Cnst Double
+  | CStr String
+  | CVar String
+  deriving (Eq, Ord, Show, Read)
+
+data VarType =
+    A                  -- A-rate signal
+  | K                  -- K-rate signal
+  | I                  -- i-time value
+  | F                  -- fsig
+  | T                  -- function table
+  | IC                 -- score i-statement
+  | St                 -- String
+  | U                  -- Unit
+  | Tp VarType VarType -- tuple
+  | T3 VarType VarType VarType         -- 3-tuple
+  | T4 VarType VarType VarType VarType -- 4-element tuple
+  | CList VarType      -- list
+  deriving (Eq, Ord, Read, Show)
+
+-- | get the initial character of a csound var from a VarType
+mkChr :: VarType -> Char
+mkChr T  = 'f'
+mkChr IC = 'i'
+mkChr St = 'i'  -- string type stored in ivals
+mkChr x = toLower . head . show $ x
+
+getLbl :: CVar -> String
+getLbl (Cnst x)   = show x
+getLbl (CStr s)   = show s
+getLbl (CVar s)   = s
+
+-- |Polyvariadic support for building argument lists
+class ArgListBuilder r where
+  appendToList :: [String] -> r
+
+instance ArgListBuilder [String] where
+  appendToList = reverse
+
+instance (Varable a, ArgListBuilder r) => ArgListBuilder (a -> r) where
+  appendToList arg = appendToList . (\acc a -> getVarLbl a : acc) arg
+
+mkOp0 :: Varable out => String -> S n out
+mkOp0 opname = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s\n" outName opname
+  return out
+
+-- |helper function to create a 1-argument opcode instance.
+-- I should make these with TH, but that would require having "genName" in scope
+-- which means S would need to be in scope, but then all the S instances
+-- would be orphans, which I don't want either...
+mkOp1 :: (Varable a, Varable out) => String -> a -> S n out
+mkOp1 opname a1 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname (getVarLbl a1)
+  return out
+
+mkOp2 opname a1 a2 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2)
+  return out
+
+mkOp3 opname a1 a2 a3 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3)
+  return out
+
+mkOp4 opname a1 a2 a3 a4 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4)
+  return out
+
+mkOp5 opname a1 a2 a3 a4 a5 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5)
+  return out
+
+mkOp6 opname a1 a2 a3 a4 a5 a6 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6)
+  return out
+
+mkOp7 opname a1 a2 a3 a4 a5 a6 a7 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7)
+  return out
+
+mkOp8 opname a1 a2 a3 a4 a5 a6 a7 a8 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8)
+  return out
+
+mkOp9 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9)
+  return out
+
+mkOp10 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10)
+  return out
+
+mkOp11 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11)
+  return out
+
+mkOp12 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+  return out
+
+mkOp13 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13)
+  return out
+
+mkOp17 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17)
+  return out
+
+-- | remove null arguments; these appear when a list of arguments is empty.
+argCleaner :: [String] -> String
+argCleaner = intercalate ", " . filter (Prelude.not . null)
+
+mkOp14 = error "mkOp14"
+mkOp15 = error "mkOp15"
+mkOp16 = error "mkOp16"
+mkOp18 = error "mkOp18"
+mkOp19 = error "mkOp19"
+mkOp22 = error "mkOp22"
+mkOp26 = error "mkOp26"
+mkOp32 = error "mkOp32"
+mkOp83 = error "mkOp83"
+mkOp99 = error "mkOp99"
+mkOp51 = error "mkOp51"
+mkOp34 = error "mkOp34"
+mkOp43 = error "mkOp43"
+
+-- ------------------------------------------
+-- ------------------------------------------
+-- sco helpers
+
+-- | A score item.  The "Card" name is old-school
+data Card = Card VarType [String] deriving (Eq, Read, Show)
+
+card2str :: Card -> String
+card2str (Card typ args) = mkChr typ : unwords args ++ "\n"
+
+writeCard :: Card -> S n ()
+writeCard = tellSco . card2str
+
+mkTbl :: Int -> Int -> Int -> [Int] -> Card
+mkTbl nm time sz args = Card T . map show $ nm:time:sz:args
+
+-- |Create a 0-filled f-statement in the score section.
+mkScoreBuf :: Int -> Int -> S n ()
+mkScoreBuf nm sz = writeCard $ mkTbl nm 0 sz [17,0,0]
+
+-- | Holds data on a score item for memoization purposes.
+data CardM = CardM VarType String String deriving (Eq, Ord, Show)
+
+cacheBuf :: String -> Int -> CardM
+cacheBuf lbl = CardM T lbl . show
+
+-- ------------------------------------------
+-- ------------------------------------------
+-- external interface helpers
+
+data BusType = KBus | TblBus Int deriving (Eq, Read, Show)
+
+-- |Specifies details for a Host output described within the language.
+-- First string is a host-specified label.  Second is an auto-generated
+-- name (e.g. tablenum)
+data HostOut = HostOut {
+  busType :: BusType,
+  busLbl  :: String,
+  busName :: String } deriving (Eq, Read, Show)
+
+-- ------------------------------------------
+-- ------------------------------------------
+
+data CacheKey =
+ CKC CardM    -- score cache
+ deriving (Eq, Ord, Show)
+
+type WCache  = M.Map CacheKey CVar
+type GenMap  = M.Map VarType Int
+type ICache = S.Set Int
+data SState  = SState {
+  wcache :: WCache
+ ,genMap :: GenMap
+ ,iCache :: ICache}
+
+type ScoType = TL.Text
+type OrcType = TL.Text
+type HostType = [HostOut]
+
+type WType = (ScoType, OrcType, HostType)
+type RType = (Integer, Integer) -- SR and ksmps
+
+defaultRType = (44100,16)
+
+newtype S n a = S { unS :: RWS RType WType SState a }
+  deriving (Functor, Applicative, Monad, Typeable)
+
+instance MonadFix (S n) where
+  mfix f = S $ mfix (unS . f)
+
+instance MonadState (S n) where
+  type StateType (S n) = SState
+  get = S get
+  put = S . put
+
+instance MonadWriter (S n) where
+  type WriterType (S n) = WType
+  tell   = S . tell
+  listen = S . listen . unS
+  pass   = S . pass . unS
+
+instance MonadReader (S n) where
+  type EnvType (S n) = RType
+  ask   = S ask
+  local f = S . local f . unS
+
+csdHeader =
+  "<CsoundSynthesizer>\n\
+  \<CsOptions>\n\
+  \%s\n\
+  \</CsOptions>\n"
+
+-- -------------------------
+-- helpers for working with states
+
+getGen :: S n GenMap
+getGen = fmap genMap get
+
+putGen :: GenMap -> S n ()
+putGen newstate = modify (\ss -> ss {genMap = newstate})
+
+cache  :: CacheKey -> CVar -> S n ()
+cache key val = do
+  SState cmap gen imap <- get
+  put $ SState (M.insert key val cmap) gen imap
+
+cacheInstr :: Int -> S n ()
+cacheInstr n = modify (\ss -> let ic' = S.insert n (iCache ss) in ss { iCache = ic' })
+
+instrInCache :: Int -> S n Bool
+instrInCache n = do
+  (SState _ _ imap) <- get
+  return $ S.member n imap
+
+tellOrc :: String -> S n ()
+tellOrc s = tell (TL.pack s,mempty, mempty)
+
+tellSco :: String -> S n ()
+tellSco s = tell (mempty,TL.pack s,mempty)
+
+tellHost :: HostOut -> S n ()
+tellHost s = tell (mempty,mempty, [s])
+
+runS :: S n a -> RType -> (a, SState, WType)
+runS e rt = runRWS (unS e) rt (SState M.empty M.empty S.empty)
+
+evalS :: S n a -> RType -> a
+evalS e rt = let (a,_,_) = runS e rt in a
+
+getWritten :: RType -> S n x -> WType
+getWritten rt e = let (_,_,w) = runS e rt in w
+
+-- |Creates a CSD formatted String from args and an x-dsp expression.
+unifyCsd :: [String] -> RType -> S n x -> (TL.Text, [HostOut])
+unifyCsd args r = unifyCsd' args . getWritten r
+
+-- |Creates a CSD file from an argument list and Writer output
+unifyCsd' :: [String] -> WType -> (TL.Text, [HostOut])
+unifyCsd' args (orc, sco, host) = (csd, host)
+ where
+  oH = TL.pack "<CsInstruments>\n"
+  oF = TL.pack "\n</CsInstruments>\n"
+  sH = TL.pack "<CsScore>\n"
+  sF = TL.pack "\ne\n</CsScore>\n</CsoundSynthesizer>\n"
+
+  csd = TL.concat [TL.pack (printf csdHeader (unwords args))
+                  ,oH ,orc ,oF ,sH ,sco ,sF]
+
+class Varable s where
+  genName   :: S n (s, String)
+  getVarLbl :: s -> String
+
+class Varable s => PVar s where
+
+class Varable s => KVar s where
+
+-- |Create a new number of the appropriate type.
+-- This can be made into a name by prepending the type character.
+mkName :: VarType -> S n Int
+mkName typ = do
+  gen <- getGen
+  let num = fromMaybe 1 $ M.lookup typ gen
+  putGen $ M.alter (const $ Just (succ num)) typ gen
+  return num
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- Instances
+
+instance Dsp (S n) where
+  data (ASig (S n)) = S_A CVar
+  data (KSig (S n)) = S_K CVar
+  data (INum (S n)) = S_IN CVar
+  getSr    = fst <$> ask
+  getKsmps = snd <$> ask
+
+instance Constants (S n) where
+  cnst = return . S_IN . Cnst
+  ckig = return . S_K . Cnst
+  csig = return . S_A . Cnst
+
+instance Varable (ASig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup A gen
+        nm  = 'a' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) A gen) imap
+    return (S_A $ CVar nm, nm)
+  getVarLbl (S_A c) = getLbl c
+
+instance PVar (ASig (S n)) where
+
+instance Varable (KSig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup K gen
+        nm  = 'k' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) K gen) imap
+    return (S_K $ CVar nm, nm)
+  getVarLbl (S_K c) = getLbl c
+
+instance PVar (KSig (S n)) where
+instance KVar (KSig (S n)) where
+
+instance Varable (INum (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup I gen
+        nm  = 'i' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) I gen) imap
+    return (S_IN $ CVar nm, nm)
+  getVarLbl (S_IN c) = getLbl c
+
+instance Varable () where
+  genName            = return ((), "")
+  getVarLbl _        = "()"
+
+instance Varable String where
+  genName = error "Can't call 'genName' on String directly"
+  getVarLbl s = '"' : s ++ "\""
+
+instance Varable (VString (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup St gen
+        nm  = 'S' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) St gen) imap
+    return (S_VS $ CVar nm, nm)
+  getVarLbl (S_VS c) = getLbl c
+
+instance KVar (VString (S n)) where
+
+instance (Varable a, Varable b) => Varable (a,b) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    return ((o1,o2), nm1 ++ ", " ++ nm2)
+  getVarLbl (a,b)      = getVarLbl a ++ ", " ++ getVarLbl b
+
+instance (Varable a, Varable b, Varable c) =>
+ Varable (a,b,c) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    (o3,nm3) <- genName
+    return ((o1,o2,o3), intercalate ", " [nm1, nm2, nm3])
+  getVarLbl (a,b,c) =
+    intercalate ", " [getVarLbl a, getVarLbl b,getVarLbl c]
+
+instance (Varable a, Varable b, Varable c, Varable d) => Varable (a,b,c,d) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    (o3,nm3) <- genName
+    (o4,nm4) <- genName
+    return ((o1,o2,o3,o4), intercalate ", " [nm1, nm2, nm3, nm4])
+  getVarLbl (a,b,c,d) =
+    intercalate ", " [getVarLbl a, getVarLbl b,getVarLbl c, getVarLbl d]
+
+instance Varable a => Varable [a] where
+  genName             = error "Can't generate names for arbitrary lists"
+  getVarLbl           = intercalate ", " . map getVarLbl
+
+instance forall d a. (Varable a, Nat d) => Varable (TList d a) where
+  genName = do
+    outss <- replicateM (toInt (undefined :: d)) genName
+    return (TList $ map fst outss, intercalate ", " $ map snd outss)
+  getVarLbl           = intercalate ", " . map getVarLbl . unTList
+
+instance KVar (INum (S n)) where
+
+instance PVS (S n) where
+  data FSig (S n) = S_FSig CVar
+
+instance Varable (FSig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup F gen
+        nm  = 'f' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) F gen) imap
+    return (S_FSig $ CVar nm, nm)
+  getVarLbl (S_FSig c) = getLbl c
+
+-- | need this to directly use numeric literals as arguments.
+instance Varable Double where
+  genName   = error "genName shouldn't be called with Doubles"
+  getVarLbl = show
+
+instance StringVar (S n) where
+  data VString (S n) = S_VS CVar
+
+-- ---------------------------------
+-- ---------------------------------
+-- The csound class
+instance CsoundClass (S n) where
+  nchnls n   = tellOrc (printf "nchnls = %i\n" n) >> return n
+  set0dbfs n = tellOrc (printf "0dbfs = %f\n" n) >> return n
+
+-- ---------------------------------
+-- ---------------------------------
+-- Numeric support for signals
+instance Show (ASig (S n)) where
+  show (S_A s) = show s
+
+instance Eq (ASig (S n)) where
+  (S_A a) == (S_A b) = a == b
+
+instance Num (ASig (S n)) where
+  (S_A a) + (S_A b) = S_A . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_A a) - (S_A b) = S_A . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_A a) * (S_A b) = S_A . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (ASig (S n))"
+  signum      = error "signum called on (ASig (S n))"
+  fromInteger = S_A . Cnst . fromInteger
+
+instance Fractional (ASig (S n)) where
+  (S_A a) / (S_A b) = S_A . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_A . Cnst . fromRational
+
+instance Show (KSig (S n)) where
+  show (S_K s) = show s
+
+instance Eq (KSig (S n)) where
+  (S_K a) == (S_K b) = a == b
+
+instance Num (KSig (S n)) where
+  (S_K a) + (S_K b) = S_K . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_K a) - (S_K b) = S_K . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_K a) * (S_K b) = S_K . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (KSig (S n))"
+  signum      = error "signum called on (KSig (S n))"
+  fromInteger = S_K . Cnst . fromInteger
+
+instance Fractional (KSig (S n)) where
+  (S_K a) / (S_K b) = S_K . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_K . Cnst . fromRational
+
+instance Show (INum (S n)) where
+  show (S_IN s) = show s
+
+instance Eq (INum (S n)) where
+  (S_IN a) == (S_IN b) = a == b
+
+instance Num (INum (S n)) where
+  (S_IN (Cnst a)) + (S_IN (Cnst b)) = S_IN $ Cnst (a+b)
+  (S_IN a) + (S_IN b) = S_IN . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_IN (Cnst a)) - (S_IN (Cnst b)) = S_IN $ Cnst (a-b)
+  (S_IN a) - (S_IN b) = S_IN . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_IN (Cnst a)) * (S_IN (Cnst b)) = S_IN $ Cnst (a*b)
+  (S_IN a) * (S_IN b) = S_IN . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (INum (S n))"
+  signum      = error "signum called on (INum (S n))"
+  fromInteger = S_IN . Cnst . fromInteger
+
+instance Fractional (INum (S n)) where
+  (S_IN (Cnst a)) / (S_IN (Cnst b)) = S_IN . Cnst $ a/b
+  (S_IN a) / (S_IN b) = S_IN . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_IN . Cnst . fromRational
+
+instance Show s => Show ((S n) s) where
+  show s = show $ evalS s defaultRType
+
+instance Eq e => Eq ((S n) e) where
+  e1 == e2 = evalS ((==) <$> e1 <*> e2) defaultRType
+
+instance Num e => Num ((S n) e) where
+  e1 + e2     = (+) <$> e1 <*> e2
+  e1 - e2     = (-) <$> e1 <*> e2
+  e1 * e2     = (*) <$> e1 <*> e2
+  abs         = fmap Prelude.abs
+  signum      = fmap signum
+  fromInteger = pure . fromInteger
+
+instance Fractional e => Fractional ((S n) e) where
+  e1 / e2 = (/) <$> e1 <*> e2
+  recip   = fmap recip
+  fromRational = pure . fromRational
+
+-- ---------------------------------
+-- ---------------------------------
+-- core language extensions
+
+-- | supports assignment
+instance Varable a => Asn (S n) a where
+  asn = mkOp1 "="
+
+-- | supports output
+instance Out (S n) where
+  out = tellOrc . printf "       out %s\n" . getVarLbl
+  outs a1 a2 = do
+    (tellOrc $ printf "       outs %s, %s\n" (getVarLbl a1) (getVarLbl a2))
+  outq a1 a2 a3 a4 = do
+    (tellOrc $ printf "       outs %s, %s, %s, %s\n"
+      (getVarLbl a1) (getVarLbl a2) (getVarLbl a3) (getVarLbl a4))
+  outo a1 a2 a3 a4 a5 a6 a7 a8 = do
+    (tellOrc $ printf "       outs %s, %s, %s, %s, %s, %s, %s, %s\n"
+      (getVarLbl a1) (getVarLbl a2) (getVarLbl a3) (getVarLbl a4)
+      (getVarLbl a5) (getVarLbl a6) (getVarLbl a7) (getVarLbl a8))
+
+-- ---------------------------------
+-- ---------------------------------
+-- Buffers (function tables)
+
+-- | creation of buffers
+instance Buffer (S n) where
+  type Buf (S n) = INum (S n)
+  emptyBuffer sz = do
+    bufNum <- mkName T
+    mkScoreBuf bufNum sz
+    return $ fromIntegral bufNum
+
+instance (Varable a) => BufferR (S n) a a where
+  lookupAt = flip (mkOp2 "tablei")
+
+-- | creation of host-variable buffers
+instance VBuf (S n) where
+  vbuf lbl sz = do
+    (SState cmap gen imap) <- get
+    case M.lookup (CKC $ cacheBuf lbl sz) cmap of
+      Just nm -> return $ S_IN nm
+      Nothing -> do
+        bufNum <- mkName T
+        mkScoreBuf bufNum sz
+        tellHost . HostOut (TblBus sz) lbl $ show bufNum
+        let res = Cnst $ fromIntegral bufNum
+        cache (CKC $ cacheBuf lbl sz) res
+        return $ S_IN res
+
+-- ---------------------------------
+-- ---------------------------------
+-- Instruments
+
+instance (Nat m, Nat n, Show n, m :>=: n) => NumArgs S m n where
+  getArg n = return . S_IN . CVar $ 'p': show n
+
+-- | Labelled blocks (basic instrument creation)
+instance LblBlock (S n) where
+  type ArgTag (S n) = n
+  type ArgTyp (S n) = Either String Double
+  data Block (S n) = Instr Int
+  lblBlock num e = do
+    isCached <- instrInCache num
+    when (Prelude.not isCached) $ do
+      tellOrc (printf "instr %d\n" num) >> e >> tellOrc "endin\n\n"
+      clearBlockData
+      cacheInstr num
+    return $ Instr num
+  runBlock = runBlock'
+
+getArgVal :: Either String Double -> String
+getArgVal = either show show
+
+makeInstrument :: S n () -> S n (Block (S n))
+makeInstrument e = do
+  SState _ _ imap <- get
+  maybe (lblBlock 1 e) (\(n, _) -> lblBlock (n+1) e) $ S.maxView imap
+
+-- | After labelling a block (csound instr), we need to clear the opcode
+-- caches, otherwise code could be invalidly shared between instruments.
+-- We can clear the name generator too (except for table nums).
+clearBlockData :: S n ()
+clearBlockData = do
+  (SState cmap genmap imap) <- get
+  let cmap' = M.mapMaybeWithKey cmf cmap
+      genmap' = M.mapMaybeWithKey gmf genmap
+  put $ SState cmap' genmap' imap
+ where
+  cmf k       v = Just v
+  gmf T n       = Just n
+  gmf _ _       = Nothing
+
+-- | Runs a block (instr).
+runBlock' ::
+  Block (S n)
+  -> Double
+  -> Double
+  -> TList m (Either String Double)
+  -> S n ()
+runBlock' (Instr blkLbl) startIn dur args =
+  writeCard . Card IC $ [show blkLbl, show startIn, show dur]
+                        ++ map getArgVal (unTList args)
+
+-- runBlock' should have the constraint (n :>=: m), but that doesn't work
+-- because the constraint isn't passed through the LblBlock class.
+-- It's not a problem because the constraint is enforced by "getArg", so
+-- only valid arguments will be used.
+
+-- | Writes the header data
+writeHeader :: Int -> Double -> S n ()
+writeHeader nc dbfs = do
+  (sr,ksmps) <- ask
+  setSR sr
+  setKSmps ksmps
+  nchnls nc
+  set0dbfs dbfs
+  return ()
+
+setSR n       = tellOrc (printf "sr = %i\n" n) >> return n
+setKSmps n    = tellOrc (printf "ksmps = %i\n" n) >> return n
+
+-- ---------------------------------
+-- ---------------------------------
+-- phasor
+instance Phasor (S n) (KSig (S n)) (KSig (S n)) where
+  phasor = mkOp1 "phasor"
+
+instance (Varable a) => Phasor (S n) (ASig (S n)) a where
+  phasor = mkOp1 "phasor"
+
+-- oscillators
+
+-- | Supports table-lookup oscillators
+instance (Varable a, Varable b, PVar out) => Oscil (S n) out a b where
+  oscil   = mkOp3 "oscil3"
+  oscil'  = mkOp4 "oscil3"
+
+-- ---------------------------------
+-- ---------------------------------
+-- delays
+instance Delay (S n) where
+  delaySamp = mkOp1 "delay1"
+  vdelay3   = mkOp3 "vdelay3"
+
+-- delay networks
+instance DelayNet (S n) where
+  type DelayN (S n) = SDelay n
+  runDelay  = runDelay'
+  tapA      = tap'
+  tapK      = tap'
+  tapI      = tap'
+
+newtype SDelay n a = SDelay { unDelay :: S n a }
+  deriving (Functor)
+
+instance Applicative (SDelay n) where
+  pure = SDelay . pure
+  (SDelay a) <*> (SDelay b) = SDelay (a <*> b)
+
+runDelay' :: INum (S n) -> ASig (S n) -> SDelay n a -> S n a
+runDelay' maxdel insig dl = do
+  tellOrc $ printf "aNull delayr %s\n" (getVarLbl maxdel)
+  v <- unDelay dl
+  tellOrc $ printf "    delayw %s\n" (getVarLbl insig)
+  return v
+
+tap' :: Varable b => b -> SDelay n (ASig (S n))
+tap' dtime = SDelay $ mkOp1 "deltap3" dtime
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- test instruments
+
+-- | very basic block
+t1 = do
+  v <- csig 1000
+  outs v v
+
+-- | allocate a "variable buffer" (i.e. host-updated buffer)
+t2 = do
+  buf <- vbuf "a buffer" 8192
+  so <- oscil 1000 440 buf
+  outs so so
+
+-- | delay networks
+
+-- | simple delay with constant signal
+t3 = do
+  so <- runDelay 1 1000 (tapK 1)
+  outs so so
+
+t4 = do
+  buf <- vbuf "a buffer" 8192
+  so <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  dl <- runDelay 2 so d
+  sig <- asn $ so + dl
+  outs sig sig
+
+t5 = do
+  buf <- vbuf "a buffer" 8192
+  so  <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  rec dl <- runDelay 2 (so+dl) d
+  sig <- asn $ so + dl
+  outs sig sig
+
+t5' = do
+  buf <- vbuf "a buffer" 8192
+  so  <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  rec dl <- runDelay 2 (so + 0.1*dl) d
+  sig <- asn $ so + dl
+  outs sig sig
+
+-- | additive synthesis.  Shared buffer, uses the Num instance for signals.
+t6 = do
+  so  <- zipWithM (\fq buf -> oscil 1000 (fq*110) buf) [4..] (replicate 20 1)
+  so' <- asn $ sum so
+  outs so' so'
+
+-- | using fold to make an oscil stack.  Note that emptyBuffer is *not*
+-- memoized.
+t8 = do
+  buf <- emptyBuffer 8192
+  stack <- foldM (\a f -> f a) (40)
+                       (replicate 4 (\fq -> oscil 1000 fq buf))
+  outs stack stack
+
+-- | It's necessary to use monadic sequencing (here implicit in makeInstruments)
+-- to chain instruments together
+all1 = mapM makeInstrument [t1,t2, t3, t4, t5', t6, t8]
+instance  CsATSadd (S n)  where
+  aTSadd = mkOp5 "aTSadd"
+  aTSadd' = mkOp8 "aTSadd"
+
+
+instance  CsATSaddnz (S n)  where
+  aTSaddnz = mkOp3 "aTSaddnz"
+  aTSaddnz' = mkOp5 "aTSaddnz"
+
+
+instance  CsATSbufread (S n)  where
+  aTSbufread = mkOp4 "aTSbufread"
+  aTSbufread' = mkOp6 "aTSbufread"
+
+
+instance  CsATScross (S n)  where
+  aTScross = mkOp7 "aTScross"
+  aTScross' = mkOp11 "aTScross"
+
+
+instance  CsATSinfo (S n)  where
+  aTSinfo = mkOp2 "aTSinfo"
+
+
+instance  CsATSinterpread (S n)  where
+  aTSinterpread = mkOp1 "aTSinterpread"
+
+
+instance  CsATSpartialtap (S n)  where
+  aTSpartialtap = mkOp1 "aTSpartialtap"
+
+
+instance  CsATSread (S n)  where
+  aTSread = mkOp3 "aTSread"
+
+
+instance  CsATSreadnz (S n)  where
+  aTSreadnz = mkOp3 "aTSreadnz"
+
+
+instance  CsATSsinnoi (S n)  where
+  aTSsinnoi = mkOp6 "aTSsinnoi"
+  aTSsinnoi' = mkOp8 "aTSsinnoi"
+
+
+instance  CsMixerClear (S n)  where
+  mixerClear = mkOp0 "mixerClear"
+
+
+instance  CsMixerGetLevel (S n)  where
+  mixerGetLevel = mkOp2 "mixerGetLevel"
+
+
+instance  CsMixerReceive (S n)  where
+  mixerReceive = mkOp2 "mixerReceive"
+
+
+instance  CsMixerSend (S n)  where
+  mixerSend = mkOp4 "mixerSend"
+
+
+instance  CsMixerSetLevel (S n)  where
+  mixerSetLevel = mkOp3 "mixerSetLevel"
+
+
+instance  CsMixerSetLevel_i (S n)  where
+  mixerSetLevel_i = mkOp3 "mixerSetLevel_i"
+
+
+instance  CsACS (S n)  where
+  aCS = mkOp1 "aCS"
+
+
+instance  CsAbs (S n) (ASig (S n)) (ASig (S n)) where
+  abs = mkOp1 "abs"
+
+
+instance  CsAbs (S n) (KSig (S n)) (KSig (S n)) where
+  abs = mkOp1 "abs"
+
+
+instance  CsAbs (S n) (INum (S n)) (INum (S n)) where
+  abs = mkOp1 "abs"
+
+
+instance (Varable a, Varable b) => CsAdd (S n) (ASig (S n)) a b where
+  add = mkOp2 "add"
+
+
+instance  CsAdd (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  add = mkOp2 "add"
+
+
+instance  CsAdd (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  add = mkOp2 "add"
+
+
+instance (PVar out) => CsAdsr (S n) out where
+  adsr = mkOp4 "adsr"
+  adsr' = mkOp5 "adsr"
+
+
+instance  CsAdsyn (S n)  where
+  adsyn = mkOp4 "adsyn"
+  adsyn' = mkOp5 "adsyn"
+
+
+instance  CsAdsynt (S n)  where
+  adsynt = mkOp6 "adsynt"
+  adsynt' = mkOp7 "adsynt"
+
+
+instance  CsAdsynt2 (S n)  where
+  adsynt2 = mkOp6 "adsynt2"
+  adsynt2' = mkOp7 "adsynt2"
+
+
+instance  CsAftouch (S n)  where
+  aftouch = mkOp0 "aftouch"
+  aftouch' = mkOp2 "aftouch"
+
+
+instance  CsAlpass (S n)  where
+  alpass = mkOp3 "alpass"
+  alpass' = mkOp5 "alpass"
+
+
+instance  CsAlwayson (S n)  where
+  alwayson = mkOp2 "alwayson"
+
+
+instance  CsAmpdb (S n) (ASig (S n)) (ASig (S n)) where
+  ampdb = mkOp1 "ampdb"
+
+
+instance  CsAmpdb (S n) (KSig (S n)) (KSig (S n)) where
+  ampdb = mkOp1 "ampdb"
+
+
+instance  CsAmpdb (S n) (INum (S n)) (INum (S n)) where
+  ampdb = mkOp1 "ampdb"
+
+
+instance  CsAmpdbfs (S n) (ASig (S n)) (ASig (S n)) where
+  ampdbfs = mkOp1 "ampdbfs"
+
+
+instance  CsAmpdbfs (S n) (KSig (S n)) (KSig (S n)) where
+  ampdbfs = mkOp1 "ampdbfs"
+
+
+instance  CsAmpdbfs (S n) (INum (S n)) (INum (S n)) where
+  ampdbfs = mkOp1 "ampdbfs"
+
+
+instance  CsAmpmidi (S n)  where
+  ampmidi = mkOp1 "ampmidi"
+  ampmidi' = mkOp2 "ampmidi"
+
+
+instance  CsAmpmidid (S n) (KSig (S n)) where
+  ampmidid = mkOp2 "ampmidid"
+
+
+instance  CsAmpmidid (S n) (INum (S n)) where
+  ampmidid = mkOp2 "ampmidid"
+
+
+instance (Varable a, Varable b) => CsAnd (S n) (ASig (S n)) a b where
+  and = mkOp2 "and"
+
+
+instance  CsAnd (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  and = mkOp2 "and"
+
+
+instance  CsAnd (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  and = mkOp2 "and"
+
+
+instance  CsAreson (S n)  where
+  areson = mkOp3 "areson"
+  areson' = mkOp5 "areson"
+
+
+instance  CsAresonk (S n)  where
+  aresonk = mkOp3 "aresonk"
+  aresonk' = mkOp5 "aresonk"
+
+
+instance  CsAtone (S n)  where
+  atone = mkOp2 "atone"
+  atone' = mkOp3 "atone"
+
+
+instance  CsAtonek (S n)  where
+  atonek = mkOp2 "atonek"
+  atonek' = mkOp3 "atonek"
+
+
+instance  CsAtonex (S n)  where
+  atonex = mkOp2 "atonex"
+  atonex' = mkOp4 "atonex"
+
+
+instance  CsBabo (S n)  where
+  babo = mkOp7 "babo"
+  babo' = mkOp9 "babo"
+
+
+instance  CsBalance (S n)  where
+  balance = mkOp2 "balance"
+  balance' = mkOp4 "balance"
+
+
+instance  CsBamboo (S n)  where
+  bamboo = mkOp2 "bamboo"
+  bamboo' = mkOp8 "bamboo"
+
+
+instance  CsBarmodel (S n)  where
+  barmodel = mkOp9 "barmodel"
+
+
+instance  CsBbcutm (S n)  where
+  bbcutm = mkOp6 "bbcutm"
+  bbcutm' = mkOp9 "bbcutm"
+
+
+instance  CsBbcuts (S n)  where
+  bbcuts = mkOp7 "bbcuts"
+  bbcuts' = mkOp10 "bbcuts"
+
+
+instance  CsBetarand (S n) (ASig (S n)) where
+  betarand = mkOp3 "betarand"
+
+
+instance  CsBetarand (S n) (KSig (S n)) where
+  betarand = mkOp3 "betarand"
+
+
+instance  CsBetarand (S n) (INum (S n)) where
+  betarand = mkOp3 "betarand"
+
+
+instance  CsBexprnd (S n) (ASig (S n)) where
+  bexprnd = mkOp1 "bexprnd"
+
+
+instance  CsBexprnd (S n) (KSig (S n)) where
+  bexprnd = mkOp1 "bexprnd"
+
+
+instance  CsBexprnd (S n) (INum (S n)) where
+  bexprnd = mkOp1 "bexprnd"
+
+
+instance (Nat d) => CsBformdec (S n) d where
+  bformdec = mkOp5 "bformdec"
+
+
+instance (Nat d) => CsBformdec1 (S n) d where
+  bformdec1 = mkOp2 "bformdec1"
+
+
+instance (Nat d) => CsBformenc1 (S n) d where
+  bformenc1 = mkOp3 "bformenc1"
+
+
+instance  CsBinit (S n)  where
+  binit = mkOp2 "binit"
+
+
+instance  CsBiquad (S n)  where
+  biquad = mkOp7 "biquad"
+  biquad' = mkOp8 "biquad"
+
+
+instance  CsBiquada (S n)  where
+  biquada = mkOp7 "biquada"
+  biquada' = mkOp8 "biquada"
+
+
+instance  CsBirnd (S n) (KSig (S n)) where
+  birnd = mkOp1 "birnd"
+
+
+instance  CsBirnd (S n) (INum (S n)) where
+  birnd = mkOp1 "birnd"
+
+
+instance (Varable a, Varable b) => CsBqrez (S n) a b where
+  bqrez = mkOp3 "bqrez"
+  bqrez' = mkOp5 "bqrez"
+
+
+instance  CsButbp (S n)  where
+  butbp = mkOp3 "butbp"
+  butbp' = mkOp4 "butbp"
+
+
+instance  CsButbr (S n)  where
+  butbr = mkOp3 "butbr"
+  butbr' = mkOp4 "butbr"
+
+
+instance  CsButhp (S n)  where
+  buthp = mkOp2 "buthp"
+  buthp' = mkOp3 "buthp"
+
+
+instance  CsButlp (S n)  where
+  butlp = mkOp2 "butlp"
+  butlp' = mkOp3 "butlp"
+
+
+instance  CsButterbp (S n)  where
+  butterbp = mkOp3 "butterbp"
+  butterbp' = mkOp4 "butterbp"
+
+
+instance  CsButterbr (S n)  where
+  butterbr = mkOp3 "butterbr"
+  butterbr' = mkOp4 "butterbr"
+
+
+instance  CsButterhp (S n)  where
+  butterhp = mkOp2 "butterhp"
+  butterhp' = mkOp3 "butterhp"
+
+
+instance  CsButterlp (S n)  where
+  butterlp = mkOp2 "butterlp"
+  butterlp' = mkOp3 "butterlp"
+
+
+instance  CsButton (S n)  where
+  button = mkOp1 "button"
+
+
+instance (Varable a, Varable b) => CsBuzz (S n) a b where
+  buzz = mkOp4 "buzz"
+  buzz' = mkOp5 "buzz"
+
+
+instance  CsCabasa (S n)  where
+  cabasa = mkOp2 "cabasa"
+  cabasa' = mkOp5 "cabasa"
+
+
+instance  CsCauchy (S n) (ASig (S n)) where
+  cauchy = mkOp1 "cauchy"
+
+
+instance  CsCauchy (S n) (KSig (S n)) where
+  cauchy = mkOp1 "cauchy"
+
+
+instance  CsCauchy (S n) (INum (S n)) where
+  cauchy = mkOp1 "cauchy"
+
+
+instance  CsCeil (S n) (ASig (S n)) (ASig (S n)) where
+  ceil = mkOp1 "ceil"
+
+
+instance  CsCeil (S n) (KSig (S n)) (KSig (S n)) where
+  ceil = mkOp1 "ceil"
+
+
+instance  CsCeil (S n) (INum (S n)) (INum (S n)) where
+  ceil = mkOp1 "ceil"
+
+
+instance  CsCent (S n) (ASig (S n)) (ASig (S n)) where
+  cent = mkOp1 "cent"
+
+
+instance  CsCent (S n) (KSig (S n)) (KSig (S n)) where
+  cent = mkOp1 "cent"
+
+
+instance  CsCent (S n) (INum (S n)) (INum (S n)) where
+  cent = mkOp1 "cent"
+
+
+instance  CsChanctrl (S n) (KSig (S n)) where
+  chanctrl = mkOp2 "chanctrl"
+  chanctrl' = mkOp4 "chanctrl"
+
+
+instance  CsChanctrl (S n) (INum (S n)) where
+  chanctrl = mkOp2 "chanctrl"
+  chanctrl' = mkOp4 "chanctrl"
+
+
+instance  CsChanged (S n)  where
+  changed = mkOp1 "changed"
+
+
+instance  CsChani (S n) (ASig (S n)) where
+  chani = mkOp1 "chani"
+
+
+instance  CsChani (S n) (KSig (S n)) where
+  chani = mkOp1 "chani"
+
+
+instance (Varable a) => CsChano (S n) a where
+  chano = mkOp2 "chano"
+
+
+instance  CsChebyshevpoly (S n)  where
+  chebyshevpoly = mkOp2 "chebyshevpoly"
+
+
+instance  CsCheckbox (S n)  where
+  checkbox = mkOp1 "checkbox"
+
+
+instance  CsChn_S (S n)  where
+  chn_S = mkOp2 "chn_S"
+
+
+instance  CsChn_a (S n)  where
+  chn_a = mkOp2 "chn_a"
+
+
+instance  CsChn_k (S n)  where
+  chn_k = mkOp2 "chn_k"
+  chn_k' = mkOp6 "chn_k"
+
+
+instance  CsChnclear (S n)  where
+  chnclear = mkOp1 "chnclear"
+
+
+instance  CsChnexport (S n) (ASig (S n)) where
+  chnexport = mkOp2 "chnexport"
+
+
+instance  CsChnexport (S n) (KSig (S n)) where
+  chnexport = mkOp2 "chnexport"
+
+
+instance  CsChnexport (S n) (INum (S n)) where
+  chnexport = mkOp2 "chnexport"
+
+
+instance  CsChnexport (S n) (VString (S n)) where
+  chnexport = mkOp2 "chnexport"
+
+
+instance  CsChnget (S n) (ASig (S n)) where
+  chnget = mkOp1 "chnget"
+
+
+instance  CsChnget (S n) (KSig (S n)) where
+  chnget = mkOp1 "chnget"
+
+
+instance  CsChnget (S n) (INum (S n)) where
+  chnget = mkOp1 "chnget"
+
+
+instance  CsChnget (S n) (VString (S n)) where
+  chnget = mkOp1 "chnget"
+
+
+instance  CsChnmix (S n)  where
+  chnmix = mkOp2 "chnmix"
+
+
+instance  CsChnrecv (S n)  where
+  chnrecv = mkOp1 "chnrecv"
+  chnrecv' = mkOp2 "chnrecv"
+
+
+instance  CsChnsend (S n)  where
+  chnsend = mkOp1 "chnsend"
+  chnsend' = mkOp2 "chnsend"
+
+
+instance (Varable a) => CsChnset (S n) a where
+  chnset = mkOp2 "chnset"
+
+
+instance  CsClear (S n)  where
+  clear = mkOp1 "clear"
+
+
+instance  CsClfilt (S n)  where
+  clfilt = mkOp4 "clfilt"
+  clfilt' = mkOp8 "clfilt"
+
+
+instance  CsClip (S n)  where
+  clip = mkOp3 "clip"
+  clip' = mkOp4 "clip"
+
+
+instance  CsClockoff (S n)  where
+  clockoff = mkOp1 "clockoff"
+
+
+instance  CsClockon (S n)  where
+  clockon = mkOp1 "clockon"
+
+
+instance  CsComb (S n)  where
+  comb = mkOp3 "comb"
+  comb' = mkOp5 "comb"
+
+
+instance  CsCompress (S n)  where
+  compress = mkOp9 "compress"
+
+
+instance  CsConnect (S n)  where
+  connect = mkOp4 "connect"
+
+
+instance  CsControl (S n)  where
+  control = mkOp1 "control"
+
+
+instance (Nat d) => CsConvle (S n) d where
+  convle = mkOp2 "convle"
+  convle' = mkOp3 "convle"
+
+
+instance (Nat d) => CsConvolve (S n) d where
+  convolve = mkOp2 "convolve"
+  convolve' = mkOp3 "convolve"
+
+
+instance  CsCos (S n) (ASig (S n)) (ASig (S n)) where
+  cos = mkOp1 "cos"
+
+
+instance  CsCos (S n) (KSig (S n)) (KSig (S n)) where
+  cos = mkOp1 "cos"
+
+
+instance  CsCos (S n) (INum (S n)) (INum (S n)) where
+  cos = mkOp1 "cos"
+
+
+instance  CsCosh (S n) (ASig (S n)) (ASig (S n)) where
+  cosh = mkOp1 "cosh"
+
+
+instance  CsCosh (S n) (KSig (S n)) (KSig (S n)) where
+  cosh = mkOp1 "cosh"
+
+
+instance  CsCosh (S n) (INum (S n)) (INum (S n)) where
+  cosh = mkOp1 "cosh"
+
+
+instance  CsCosinv (S n) (ASig (S n)) (ASig (S n)) where
+  cosinv = mkOp1 "cosinv"
+
+
+instance  CsCosinv (S n) (KSig (S n)) (KSig (S n)) where
+  cosinv = mkOp1 "cosinv"
+
+
+instance  CsCosinv (S n) (INum (S n)) (INum (S n)) where
+  cosinv = mkOp1 "cosinv"
+
+
+instance  CsCps2pch (S n)  where
+  cps2pch = mkOp2 "cps2pch"
+
+
+instance  CsCpsmidi (S n)  where
+  cpsmidi = mkOp0 "cpsmidi"
+
+
+instance  CsCpsmidib (S n) (KSig (S n)) where
+  cpsmidib = mkOp0 "cpsmidib"
+  cpsmidib' = mkOp1 "cpsmidib"
+
+
+instance  CsCpsmidib (S n) (INum (S n)) where
+  cpsmidib = mkOp0 "cpsmidib"
+  cpsmidib' = mkOp1 "cpsmidib"
+
+
+instance  CsCpsmidinn (S n) (KSig (S n)) where
+  cpsmidinn = mkOp1 "cpsmidinn"
+
+
+instance  CsCpsmidinn (S n) (INum (S n)) where
+  cpsmidinn = mkOp1 "cpsmidinn"
+
+
+instance  CsCpsoct (S n) (ASig (S n)) (ASig (S n)) where
+  cpsoct = mkOp1 "cpsoct"
+
+
+instance  CsCpsoct (S n) (KSig (S n)) (KSig (S n)) where
+  cpsoct = mkOp1 "cpsoct"
+
+
+instance  CsCpsoct (S n) (INum (S n)) (INum (S n)) where
+  cpsoct = mkOp1 "cpsoct"
+
+
+instance  CsCpspch (S n) (KSig (S n)) where
+  cpspch = mkOp1 "cpspch"
+
+
+instance  CsCpspch (S n) (INum (S n)) where
+  cpspch = mkOp1 "cpspch"
+
+
+instance  CsCpstmid (S n)  where
+  cpstmid = mkOp1 "cpstmid"
+
+
+instance  CsCpstun (S n)  where
+  cpstun = mkOp3 "cpstun"
+
+
+instance  CsCpstuni (S n)  where
+  cpstuni = mkOp2 "cpstuni"
+
+
+instance  CsCpsxpch (S n)  where
+  cpsxpch = mkOp4 "cpsxpch"
+
+
+instance  CsCpuprc (S n)  where
+  cpuprc = mkOp2 "cpuprc"
+
+
+instance  CsCross2 (S n)  where
+  cross2 = mkOp6 "cross2"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrossfm (S n) a b c d where
+  crossfm = mkOp7 "crossfm"
+  crossfm' = mkOp9 "crossfm"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrossfmi (S n) a b c d where
+  crossfmi = mkOp7 "crossfmi"
+  crossfmi' = mkOp9 "crossfmi"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrossfmpm (S n) a b c d where
+  crossfmpm = mkOp7 "crossfmpm"
+  crossfmpm' = mkOp9 "crossfmpm"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrossfmpmi (S n) a b c d where
+  crossfmpmi = mkOp7 "crossfmpmi"
+  crossfmpmi' = mkOp9 "crossfmpmi"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrosspm (S n) a b c d where
+  crosspm = mkOp7 "crosspm"
+  crosspm' = mkOp9 "crosspm"
+
+
+instance (Varable a, Varable b, Varable c, Varable d) => CsCrosspmi (S n) a b c d where
+  crosspmi = mkOp7 "crosspmi"
+  crosspmi' = mkOp9 "crosspmi"
+
+
+instance  CsCrunch (S n)  where
+  crunch = mkOp2 "crunch"
+  crunch' = mkOp5 "crunch"
+
+
+instance  CsCtlchn (S n)  where
+  ctlchn = mkOp0 "ctlchn"
+  ctlchn' = mkOp2 "ctlchn"
+
+
+instance  CsCtrl14 (S n) (KSig (S n)) where
+  ctrl14 = mkOp5 "ctrl14"
+  ctrl14' = mkOp6 "ctrl14"
+
+
+instance  CsCtrl14 (S n) (INum (S n)) where
+  ctrl14 = mkOp5 "ctrl14"
+  ctrl14' = mkOp6 "ctrl14"
+
+
+instance  CsCtrl21 (S n) (KSig (S n)) where
+  ctrl21 = mkOp6 "ctrl21"
+  ctrl21' = mkOp7 "ctrl21"
+
+
+instance  CsCtrl21 (S n) (INum (S n)) where
+  ctrl21 = mkOp6 "ctrl21"
+  ctrl21' = mkOp7 "ctrl21"
+
+
+instance  CsCtrl7 (S n) (ASig (S n)) where
+  ctrl7 = mkOp4 "ctrl7"
+  ctrl7' = mkOp5 "ctrl7"
+
+
+instance  CsCtrl7 (S n) (KSig (S n)) where
+  ctrl7 = mkOp4 "ctrl7"
+  ctrl7' = mkOp5 "ctrl7"
+
+
+instance  CsCtrl7 (S n) (INum (S n)) where
+  ctrl7 = mkOp4 "ctrl7"
+  ctrl7' = mkOp5 "ctrl7"
+
+
+instance  CsCtrlinit (S n)  where
+  ctrlinit = mkOp2 "ctrlinit"
+
+
+instance  CsCuserrnd (S n) (ASig (S n)) where
+  cuserrnd = mkOp3 "cuserrnd"
+
+
+instance  CsCuserrnd (S n) (KSig (S n)) where
+  cuserrnd = mkOp3 "cuserrnd"
+
+
+instance  CsCuserrnd (S n) (INum (S n)) where
+  cuserrnd = mkOp3 "cuserrnd"
+
+
+instance  CsDam (S n)  where
+  dam = mkOp6 "dam"
+
+
+instance  CsDate (S n)  where
+  date = mkOp0 "date"
+
+
+instance  CsDates (S n)  where
+  dates = mkOp0 "dates"
+  dates' = mkOp1 "dates"
+
+
+instance  CsDb (S n) (ASig (S n)) (ASig (S n)) where
+  db = mkOp1 "db"
+
+
+instance  CsDb (S n) (KSig (S n)) (KSig (S n)) where
+  db = mkOp1 "db"
+
+
+instance  CsDb (S n) (INum (S n)) (INum (S n)) where
+  db = mkOp1 "db"
+
+
+instance  CsDbamp (S n) (KSig (S n)) where
+  dbamp = mkOp1 "dbamp"
+
+
+instance  CsDbamp (S n) (INum (S n)) where
+  dbamp = mkOp1 "dbamp"
+
+
+instance  CsDbfsamp (S n) (KSig (S n)) where
+  dbfsamp = mkOp1 "dbfsamp"
+
+
+instance  CsDbfsamp (S n) (INum (S n)) where
+  dbfsamp = mkOp1 "dbfsamp"
+
+
+instance  CsDcblock (S n)  where
+  dcblock = mkOp1 "dcblock"
+  dcblock' = mkOp2 "dcblock"
+
+
+instance  CsDcblock2 (S n)  where
+  dcblock2 = mkOp1 "dcblock2"
+  dcblock2' = mkOp3 "dcblock2"
+
+
+instance  CsDconv (S n)  where
+  dconv = mkOp3 "dconv"
+
+
+instance  CsDelay (S n)  where
+  delay = mkOp2 "delay"
+  delay' = mkOp3 "delay"
+
+
+instance  CsDelay1 (S n)  where
+  delay1 = mkOp1 "delay1"
+  delay1' = mkOp2 "delay1"
+
+
+instance  CsDelayk (S n)  where
+  delayk = mkOp2 "delayk"
+  delayk' = mkOp3 "delayk"
+
+
+instance  CsDelayw (S n)  where
+  delayw = mkOp1 "delayw"
+
+
+instance  CsDeltap (S n)  where
+  deltap = mkOp1 "deltap"
+  deltap' = mkOp2 "deltap"
+
+
+instance (Varable a) => CsDeltap3 (S n) a where
+  deltap3 = mkOp1 "deltap3"
+  deltap3' = mkOp2 "deltap3"
+
+
+instance (Varable a) => CsDeltapi (S n) a where
+  deltapi = mkOp1 "deltapi"
+  deltapi' = mkOp2 "deltapi"
+
+
+instance (Varable a) => CsDeltapn (S n) a where
+  deltapn = mkOp1 "deltapn"
+  deltapn' = mkOp2 "deltapn"
+
+
+instance  CsDeltapx (S n)  where
+  deltapx = mkOp2 "deltapx"
+  deltapx' = mkOp3 "deltapx"
+
+
+instance  CsDeltapxw (S n)  where
+  deltapxw = mkOp3 "deltapxw"
+  deltapxw' = mkOp4 "deltapxw"
+
+
+instance  CsDenorm (S n)  where
+  denorm = mkOp1 "denorm"
+
+
+instance (PVar out, Varable a) => CsDiff (S n) out a where
+  diff = mkOp1 "diff"
+  diff' = mkOp2 "diff"
+
+
+instance (Nat d) => CsDiskgrain (S n) d where
+  diskgrain = mkOp8 "diskgrain"
+  diskgrain' = mkOp10 "diskgrain"
+
+
+instance (Nat d) => CsDiskin (S n) d where
+  diskin = mkOp2 "diskin"
+  diskin' = mkOp7 "diskin"
+
+
+instance (Nat d) => CsDiskin2 (S n) d where
+  diskin2 = mkOp2 "diskin2"
+  diskin2' = mkOp8 "diskin2"
+
+
+instance  CsDistort (S n)  where
+  distort = mkOp3 "distort"
+  distort' = mkOp5 "distort"
+
+
+instance  CsDistort1 (S n)  where
+  distort1 = mkOp5 "distort1"
+  distort1' = mkOp6 "distort1"
+
+
+instance (Varable a, Varable b) => CsDiv (S n) (ASig (S n)) a b where
+  div = mkOp2 "div"
+
+
+instance  CsDiv (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  div = mkOp2 "div"
+
+
+instance  CsDiv (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  div = mkOp2 "div"
+
+
+instance (Varable a, Varable b) => CsDivz (S n) (ASig (S n)) a b where
+  divz = mkOp3 "divz"
+
+
+instance  CsDivz (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  divz = mkOp3 "divz"
+
+
+instance  CsDivz (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  divz = mkOp3 "divz"
+
+
+instance  CsDoppler (S n)  where
+  doppler = mkOp3 "doppler"
+  doppler' = mkOp5 "doppler"
+
+
+instance  CsDownsamp (S n)  where
+  downsamp = mkOp1 "downsamp"
+  downsamp' = mkOp2 "downsamp"
+
+
+instance  CsDripwater (S n)  where
+  dripwater = mkOp2 "dripwater"
+  dripwater' = mkOp8 "dripwater"
+
+
+instance  CsDumpk (S n)  where
+  dumpk = mkOp4 "dumpk"
+
+
+instance  CsDumpk2 (S n)  where
+  dumpk2 = mkOp5 "dumpk2"
+
+
+instance  CsDumpk3 (S n)  where
+  dumpk3 = mkOp6 "dumpk3"
+
+
+instance  CsDumpk4 (S n)  where
+  dumpk4 = mkOp7 "dumpk4"
+
+
+instance  CsDuserrnd (S n) (ASig (S n)) where
+  duserrnd = mkOp1 "duserrnd"
+
+
+instance  CsDuserrnd (S n) (KSig (S n)) where
+  duserrnd = mkOp1 "duserrnd"
+
+
+instance  CsDuserrnd (S n) (INum (S n)) where
+  duserrnd = mkOp1 "duserrnd"
+
+
+instance  CsEndin (S n)  where
+  endin = mkOp0 "endin"
+
+
+instance  CsEndop (S n)  where
+  endop = mkOp0 "endop"
+
+
+instance (PVar out, Varable a) => CsEnvlpx (S n) out a where
+  envlpx = mkOp7 "envlpx"
+  envlpx' = mkOp8 "envlpx"
+
+
+instance (PVar out, Varable a) => CsEnvlpxr (S n) out a where
+  envlpxr = mkOp6 "envlpxr"
+  envlpxr' = mkOp8 "envlpxr"
+
+
+instance (PVar out, Varable a) => CsEphasor (S n) out a where
+  ephasor = mkOp2 "ephasor"
+  ephasor' = mkOp3 "ephasor"
+
+
+instance  CsEqfil (S n)  where
+  eqfil = mkOp4 "eqfil"
+  eqfil' = mkOp5 "eqfil"
+
+
+instance  CsEvent_i (S n)  where
+  event_i = mkOp3 "event_i"
+
+
+instance  CsExitnow (S n)  where
+  exitnow = mkOp0 "exitnow"
+
+
+instance  CsExp (S n) (ASig (S n)) (ASig (S n)) where
+  exp = mkOp1 "exp"
+
+
+instance  CsExp (S n) (KSig (S n)) (KSig (S n)) where
+  exp = mkOp1 "exp"
+
+
+instance  CsExp (S n) (INum (S n)) (INum (S n)) where
+  exp = mkOp1 "exp"
+
+
+instance  CsExpcurve (S n)  where
+  expcurve = mkOp2 "expcurve"
+
+
+instance (PVar out) => CsExpon (S n) out where
+  expon = mkOp3 "expon"
+
+
+instance  CsExprand (S n) (ASig (S n)) where
+  exprand = mkOp1 "exprand"
+
+
+instance  CsExprand (S n) (KSig (S n)) where
+  exprand = mkOp1 "exprand"
+
+
+instance  CsExprand (S n) (INum (S n)) where
+  exprand = mkOp1 "exprand"
+
+
+instance (PVar out) => CsExpseg (S n) out where
+  expseg = mkOp4 "expseg"
+
+
+instance  CsExpsega (S n)  where
+  expsega = mkOp4 "expsega"
+
+
+instance (PVar out) => CsExpsegr (S n) out where
+  expsegr = mkOp4 "expsegr"
+
+
+instance  CsFiclose (S n)  where
+  ficlose = mkOp1 "ficlose"
+
+
+instance  CsFilebit (S n)  where
+  filebit = mkOp1 "filebit"
+  filebit' = mkOp2 "filebit"
+
+
+instance  CsFilelen (S n)  where
+  filelen = mkOp1 "filelen"
+  filelen' = mkOp2 "filelen"
+
+
+instance  CsFilenchnls (S n)  where
+  filenchnls = mkOp1 "filenchnls"
+  filenchnls' = mkOp2 "filenchnls"
+
+
+instance  CsFilepeak (S n)  where
+  filepeak = mkOp1 "filepeak"
+  filepeak' = mkOp2 "filepeak"
+
+
+instance  CsFilesr (S n)  where
+  filesr = mkOp1 "filesr"
+  filesr' = mkOp2 "filesr"
+
+
+instance  CsFilevalid (S n)  where
+  filevalid = mkOp1 "filevalid"
+
+
+instance  CsFilter2 (S n) (ASig (S n)) (ASig (S n)) where
+  filter2 = mkOp4 "filter2"
+
+
+instance  CsFilter2 (S n) (KSig (S n)) (KSig (S n)) where
+  filter2 = mkOp4 "filter2"
+
+
+instance  CsFin (S n)  where
+  fin = mkOp4 "fin"
+
+
+instance  CsFini (S n)  where
+  fini = mkOp4 "fini"
+
+
+instance  CsFink (S n)  where
+  fink = mkOp4 "fink"
+
+
+instance  CsFiopen (S n)  where
+  fiopen = mkOp2 "fiopen"
+
+
+instance  CsFlanger (S n)  where
+  flanger = mkOp3 "flanger"
+  flanger' = mkOp4 "flanger"
+
+
+instance  CsFlashtxt (S n)  where
+  flashtxt = mkOp2 "flashtxt"
+
+
+instance  CsFlooper (S n)  where
+  flooper = mkOp6 "flooper"
+
+
+instance (KVar a) => CsFlooper2 (S n) a where
+  flooper2 = mkOp6 "flooper2"
+  flooper2' = mkOp11 "flooper2"
+
+
+instance  CsFlooper3 (S n)  where
+  flooper3 = mkOp6 "flooper3"
+  flooper3' = mkOp10 "flooper3"
+
+
+instance  CsFloor (S n) (ASig (S n)) (ASig (S n)) where
+  floor = mkOp1 "floor"
+
+
+instance  CsFloor (S n) (KSig (S n)) (KSig (S n)) where
+  floor = mkOp1 "floor"
+
+
+instance  CsFloor (S n) (INum (S n)) (INum (S n)) where
+  floor = mkOp1 "floor"
+
+
+instance  CsFmb3 (S n)  where
+  fmb3 = mkOp11 "fmb3"
+
+
+instance  CsFmbell (S n)  where
+  fmbell = mkOp11 "fmbell"
+
+
+instance  CsFmmetal (S n)  where
+  fmmetal = mkOp11 "fmmetal"
+
+
+instance  CsFmpercfl (S n)  where
+  fmpercfl = mkOp11 "fmpercfl"
+
+
+instance  CsFmrhode (S n)  where
+  fmrhode = mkOp11 "fmrhode"
+
+
+instance  CsFmvoice (S n)  where
+  fmvoice = mkOp11 "fmvoice"
+
+
+instance  CsFmwurlie (S n)  where
+  fmwurlie = mkOp11 "fmwurlie"
+
+
+instance (Varable a, Varable b, Varable c) => CsFof (S n) a b c where
+  fof = mkOp12 "fof"
+  fof' = mkOp15 "fof"
+
+
+instance (Varable a, Varable b, Varable c) => CsFof2 (S n) a b c where
+  fof2 = mkOp14 "fof2"
+  fof2' = mkOp15 "fof2"
+
+
+instance  CsFofilter (S n)  where
+  fofilter = mkOp4 "fofilter"
+  fofilter' = mkOp5 "fofilter"
+
+
+instance (Varable a, Varable b, Varable c) => CsFog (S n) a b c where
+  fog = mkOp13 "fog"
+  fog' = mkOp16 "fog"
+
+
+instance  CsFold (S n)  where
+  fold = mkOp2 "fold"
+
+
+instance  CsFollow (S n)  where
+  follow = mkOp2 "follow"
+
+
+instance  CsFollow2 (S n)  where
+  follow2 = mkOp3 "follow2"
+
+
+instance (Varable a, Varable b, Varable c) => CsFoscil (S n) a b c where
+  foscil = mkOp6 "foscil"
+  foscil' = mkOp7 "foscil"
+
+
+instance (Varable a, Varable b, Varable c) => CsFoscili (S n) a b c where
+  foscili = mkOp6 "foscili"
+  foscili' = mkOp7 "foscili"
+
+
+instance  CsFout (S n)  where
+  fout = mkOp3 "fout"
+
+
+instance  CsFouti (S n)  where
+  fouti = mkOp4 "fouti"
+
+
+instance  CsFoutir (S n)  where
+  foutir = mkOp4 "foutir"
+
+
+instance  CsFoutk (S n)  where
+  foutk = mkOp3 "foutk"
+
+
+instance (Varable a) => CsFprintks (S n) a where
+  fprintks = mkOp3 "fprintks"
+
+
+instance (Varable a) => CsFprints (S n) a where
+  fprints = mkOp3 "fprints"
+
+
+instance  CsFrac (S n) (ASig (S n)) (ASig (S n)) where
+  frac = mkOp1 "frac"
+
+
+instance  CsFrac (S n) (KSig (S n)) (KSig (S n)) where
+  frac = mkOp1 "frac"
+
+
+instance  CsFrac (S n) (INum (S n)) (INum (S n)) where
+  frac = mkOp1 "frac"
+
+
+instance  CsFreeverb (S n)  where
+  freeverb = mkOp4 "freeverb"
+  freeverb' = mkOp6 "freeverb"
+
+
+instance  CsFtchnls (S n)  where
+  ftchnls = mkOp1 "ftchnls"
+
+
+instance (Nat d) => CsFtconv (S n) d where
+  ftconv = mkOp3 "ftconv"
+  ftconv' = mkOp6 "ftconv"
+
+
+instance  CsFtcps (S n)  where
+  ftcps = mkOp1 "ftcps"
+
+
+instance  CsFtfree (S n)  where
+  ftfree = mkOp2 "ftfree"
+
+
+instance  CsFtgen (S n)  where
+  ftgen = mkOp6 "ftgen"
+
+
+instance  CsFtgenonce (S n)  where
+  ftgenonce = mkOp6 "ftgenonce"
+
+
+instance  CsFtgentmp (S n)  where
+  ftgentmp = mkOp6 "ftgentmp"
+
+
+instance  CsFtlen (S n)  where
+  ftlen = mkOp1 "ftlen"
+
+
+instance  CsFtload (S n)  where
+  ftload = mkOp3 "ftload"
+
+
+instance  CsFtloadk (S n)  where
+  ftloadk = mkOp4 "ftloadk"
+
+
+instance  CsFtlptim (S n)  where
+  ftlptim = mkOp1 "ftlptim"
+
+
+instance  CsFtmorf (S n)  where
+  ftmorf = mkOp3 "ftmorf"
+
+
+instance  CsFtsave (S n)  where
+  ftsave = mkOp3 "ftsave"
+
+
+instance  CsFtsavek (S n)  where
+  ftsavek = mkOp4 "ftsavek"
+
+
+instance  CsFtsr (S n)  where
+  ftsr = mkOp1 "ftsr"
+
+
+instance  CsGain (S n)  where
+  gain = mkOp2 "gain"
+  gain' = mkOp4 "gain"
+
+
+instance  CsGainslider (S n)  where
+  gainslider = mkOp1 "gainslider"
+
+
+instance  CsGauss (S n) (ASig (S n)) where
+  gauss = mkOp1 "gauss"
+
+
+instance  CsGauss (S n) (KSig (S n)) where
+  gauss = mkOp1 "gauss"
+
+
+instance  CsGauss (S n) (INum (S n)) where
+  gauss = mkOp1 "gauss"
+
+
+instance (Varable a, Varable b) => CsGbuzz (S n) a b where
+  gbuzz = mkOp6 "gbuzz"
+  gbuzz' = mkOp7 "gbuzz"
+
+
+instance  CsGetcfg (S n)  where
+  getcfg = mkOp1 "getcfg"
+
+
+instance  CsGogobel (S n)  where
+  gogobel = mkOp8 "gogobel"
+
+
+instance (Varable a, Varable b, Varable c) => CsGrain (S n) a b c where
+  grain = mkOp9 "grain"
+  grain' = mkOp10 "grain"
+
+
+instance  CsGrain2 (S n)  where
+  grain2 = mkOp6 "grain2"
+  grain2' = mkOp9 "grain2"
+
+
+instance  CsGrain3 (S n)  where
+  grain3 = mkOp11 "grain3"
+  grain3' = mkOp13 "grain3"
+
+
+instance (Varable a) => CsGranule (S n) a where
+  granule = mkOp16 "granule"
+  granule' = mkOp22 "granule"
+
+
+instance  CsGuiro (S n)  where
+  guiro = mkOp2 "guiro"
+  guiro' = mkOp7 "guiro"
+
+
+instance  CsHarmon (S n)  where
+  harmon = mkOp8 "harmon"
+
+
+instance  CsHarmon2 (S n)  where
+  harmon2 = mkOp6 "harmon2"
+  harmon2' = mkOp7 "harmon2"
+
+
+instance  CsHarmon3 (S n)  where
+  harmon3 = mkOp7 "harmon3"
+  harmon3' = mkOp8 "harmon3"
+
+
+instance  CsHarmon4 (S n)  where
+  harmon4 = mkOp8 "harmon4"
+  harmon4' = mkOp9 "harmon4"
+
+
+instance  CsHilbert (S n)  where
+  hilbert = mkOp1 "hilbert"
+
+
+instance  CsHrtfer (S n)  where
+  hrtfer = mkOp4 "hrtfer"
+
+
+instance  CsHrtfmove (S n)  where
+  hrtfmove = mkOp5 "hrtfmove"
+  hrtfmove' = mkOp8 "hrtfmove"
+
+
+instance  CsHrtfmove2 (S n)  where
+  hrtfmove2 = mkOp5 "hrtfmove2"
+  hrtfmove2' = mkOp8 "hrtfmove2"
+
+
+instance  CsHrtfstat (S n)  where
+  hrtfstat = mkOp5 "hrtfstat"
+  hrtfstat' = mkOp7 "hrtfstat"
+
+
+instance  CsHsboscil (S n)  where
+  hsboscil = mkOp6 "hsboscil"
+  hsboscil' = mkOp8 "hsboscil"
+
+
+instance  CsHvs1 (S n)  where
+  hvs1 = mkOp6 "hvs1"
+  hvs1' = mkOp7 "hvs1"
+
+
+instance  CsHvs2 (S n)  where
+  hvs2 = mkOp8 "hvs2"
+  hvs2' = mkOp9 "hvs2"
+
+
+instance  CsHvs3 (S n)  where
+  hvs3 = mkOp10 "hvs3"
+  hvs3' = mkOp11 "hvs3"
+
+
+instance  CsICS (S n)  where
+  iCS = mkOp1 "iCS"
+
+
+instance  CsIhold (S n)  where
+  ihold = mkOp0 "ihold"
+
+
+instance  CsInCS (S n)  where
+  inCS = mkOp0 "inCS"
+
+
+instance (Nat d) => CsInch (S n) d where
+  inch = mkOp1 "inch"
+
+
+instance  CsInitc14 (S n)  where
+  initc14 = mkOp4 "initc14"
+
+
+instance  CsInitc21 (S n)  where
+  initc21 = mkOp5 "initc21"
+
+
+instance  CsInitc7 (S n)  where
+  initc7 = mkOp3 "initc7"
+
+
+instance  CsInleta (S n)  where
+  inleta = mkOp1 "inleta"
+
+
+instance  CsInletf (S n)  where
+  inletf = mkOp1 "inletf"
+
+
+instance  CsInletk (S n)  where
+  inletk = mkOp1 "inletk"
+
+
+instance  CsInq (S n)  where
+  inq = mkOp0 "inq"
+
+
+instance  CsInrg (S n)  where
+  inrg = mkOp2 "inrg"
+
+
+instance  CsIns (S n)  where
+  ins = mkOp0 "ins"
+
+
+instance  CsInsglobal (S n)  where
+  insglobal = mkOp2 "insglobal"
+
+
+instance  CsInsremot (S n)  where
+  insremot = mkOp3 "insremot"
+
+
+instance  CsInstr (S n)  where
+  instr = mkOp0 "instr"
+
+
+instance  CsInt (S n) (ASig (S n)) (ASig (S n)) where
+  int = mkOp1 "int"
+
+
+instance  CsInt (S n) (KSig (S n)) (KSig (S n)) where
+  int = mkOp1 "int"
+
+
+instance  CsInt (S n) (INum (S n)) (INum (S n)) where
+  int = mkOp1 "int"
+
+
+instance (PVar out, Varable a) => CsInteg (S n) out a where
+  integ = mkOp1 "integ"
+  integ' = mkOp2 "integ"
+
+
+instance  CsInterp (S n)  where
+  interp = mkOp1 "interp"
+  interp' = mkOp3 "interp"
+
+
+instance  CsInvalue (S n) (KSig (S n)) where
+  invalue = mkOp1 "invalue"
+
+
+instance  CsInvalue (S n) (VString (S n)) where
+  invalue = mkOp1 "invalue"
+
+
+instance  CsInz (S n)  where
+  inz = mkOp1 "inz"
+
+
+instance  CsJitter (S n)  where
+  jitter = mkOp3 "jitter"
+
+
+instance  CsJitter2 (S n)  where
+  jitter2 = mkOp7 "jitter2"
+
+
+instance (PVar out, Varable a) => CsJspline (S n) out a where
+  jspline = mkOp3 "jspline"
+
+
+instance  CsKCS (S n)  where
+  kCS = mkOp1 "kCS"
+
+
+instance  CsKtableseg (S n)  where
+  ktableseg = mkOp4 "ktableseg"
+
+
+instance (PVar out) => CsLfo (S n) out where
+  lfo = mkOp2 "lfo"
+  lfo' = mkOp3 "lfo"
+
+
+instance (Varable a) => CsLimit (S n) (ASig (S n)) a where
+  limit = mkOp3 "limit"
+
+
+instance (Varable a) => CsLimit (S n) (KSig (S n)) a where
+  limit = mkOp3 "limit"
+
+
+instance  CsLimit (S n) (INum (S n)) (INum (S n)) where
+  limit = mkOp3 "limit"
+
+
+instance (PVar out) => CsLine (S n) out where
+  line = mkOp3 "line"
+
+
+instance (PVar out, Varable a) => CsLinen (S n) out a where
+  linen = mkOp4 "linen"
+
+
+instance (PVar out, Varable a) => CsLinenr (S n) out a where
+  linenr = mkOp4 "linenr"
+
+
+instance  CsLineto (S n)  where
+  lineto = mkOp2 "lineto"
+
+
+instance  CsLinrand (S n) (ASig (S n)) where
+  linrand = mkOp1 "linrand"
+
+
+instance  CsLinrand (S n) (KSig (S n)) where
+  linrand = mkOp1 "linrand"
+
+
+instance  CsLinrand (S n) (INum (S n)) where
+  linrand = mkOp1 "linrand"
+
+
+instance (PVar out) => CsLinseg (S n) out where
+  linseg = mkOp4 "linseg"
+
+
+instance (PVar out) => CsLinsegr (S n) out where
+  linsegr = mkOp4 "linsegr"
+
+
+instance (Nat d) => CsLocsend (S n) d where
+  locsend = mkOp0 "locsend"
+
+
+instance (Nat d) => CsLocsig (S n) d where
+  locsig = mkOp4 "locsig"
+
+
+instance  CsLog (S n) (ASig (S n)) (ASig (S n)) where
+  log = mkOp1 "log"
+
+
+instance  CsLog (S n) (KSig (S n)) (KSig (S n)) where
+  log = mkOp1 "log"
+
+
+instance  CsLog (S n) (INum (S n)) (INum (S n)) where
+  log = mkOp1 "log"
+
+
+instance  CsLog10 (S n) (ASig (S n)) (ASig (S n)) where
+  log10 = mkOp1 "log10"
+
+
+instance  CsLog10 (S n) (KSig (S n)) (KSig (S n)) where
+  log10 = mkOp1 "log10"
+
+
+instance  CsLog10 (S n) (INum (S n)) (INum (S n)) where
+  log10 = mkOp1 "log10"
+
+
+instance  CsLogbtwo (S n) (ASig (S n)) (ASig (S n)) where
+  logbtwo = mkOp1 "logbtwo"
+
+
+instance  CsLogbtwo (S n) (KSig (S n)) (KSig (S n)) where
+  logbtwo = mkOp1 "logbtwo"
+
+
+instance  CsLogbtwo (S n) (INum (S n)) (INum (S n)) where
+  logbtwo = mkOp1 "logbtwo"
+
+
+instance  CsLogcurve (S n)  where
+  logcurve = mkOp2 "logcurve"
+
+
+instance  CsLoopseg (S n)  where
+  loopseg = mkOp4 "loopseg"
+
+
+instance  CsLoopsegp (S n)  where
+  loopsegp = mkOp2 "loopsegp"
+
+
+instance  CsLooptseg (S n)  where
+  looptseg = mkOp4 "looptseg"
+
+
+instance  CsLoopxseg (S n)  where
+  loopxseg = mkOp4 "loopxseg"
+
+
+instance  CsLorenz (S n)  where
+  lorenz = mkOp8 "lorenz"
+  lorenz' = mkOp9 "lorenz"
+
+
+instance  CsLorismorph (S n)  where
+  lorismorph = mkOp6 "lorismorph"
+
+
+instance  CsLorisplay (S n)  where
+  lorisplay = mkOp4 "lorisplay"
+
+
+instance  CsLorisread (S n)  where
+  lorisread = mkOp6 "lorisread"
+  lorisread' = mkOp7 "lorisread"
+
+
+instance (Nat d, Varable a) => CsLoscil (S n) d a where
+  loscil = mkOp3 "loscil"
+  loscil' = mkOp10 "loscil"
+
+
+instance (Nat d, Varable a) => CsLoscil3 (S n) d a where
+  loscil3 = mkOp3 "loscil3"
+  loscil3' = mkOp10 "loscil3"
+
+
+instance (Nat d, Varable a) => CsLoscilx (S n) d a where
+  loscilx = mkOp3 "loscilx"
+  loscilx' = mkOp9 "loscilx"
+
+
+instance  CsLowpass2 (S n)  where
+  lowpass2 = mkOp3 "lowpass2"
+  lowpass2' = mkOp4 "lowpass2"
+
+
+instance  CsLowres (S n)  where
+  lowres = mkOp3 "lowres"
+  lowres' = mkOp4 "lowres"
+
+
+instance  CsLowresx (S n)  where
+  lowresx = mkOp3 "lowresx"
+  lowresx' = mkOp5 "lowresx"
+
+
+instance  CsLpf18 (S n)  where
+  lpf18 = mkOp4 "lpf18"
+
+
+instance  CsLpform (S n)  where
+  lpform = mkOp1 "lpform"
+
+
+instance  CsLpfreson (S n)  where
+  lpfreson = mkOp2 "lpfreson"
+
+
+instance (Varable a) => CsLphasor (S n) a where
+  lphasor = mkOp1 "lphasor"
+  lphasor' = mkOp8 "lphasor"
+
+
+instance  CsLpinterp (S n)  where
+  lpinterp = mkOp3 "lpinterp"
+
+
+instance  CsLposcil (S n)  where
+  lposcil = mkOp5 "lposcil"
+  lposcil' = mkOp6 "lposcil"
+
+
+instance  CsLposcil3 (S n)  where
+  lposcil3 = mkOp5 "lposcil3"
+  lposcil3' = mkOp6 "lposcil3"
+
+
+instance  CsLposcila (S n)  where
+  lposcila = mkOp5 "lposcila"
+  lposcila' = mkOp6 "lposcila"
+
+
+instance  CsLposcilsa (S n)  where
+  lposcilsa = mkOp5 "lposcilsa"
+  lposcilsa' = mkOp6 "lposcilsa"
+
+
+instance  CsLposcilsa2 (S n)  where
+  lposcilsa2 = mkOp5 "lposcilsa2"
+  lposcilsa2' = mkOp6 "lposcilsa2"
+
+
+instance  CsLpread (S n)  where
+  lpread = mkOp2 "lpread"
+  lpread' = mkOp4 "lpread"
+
+
+instance  CsLpreson (S n)  where
+  lpreson = mkOp1 "lpreson"
+
+
+instance  CsLpshold (S n)  where
+  lpshold = mkOp4 "lpshold"
+
+
+instance  CsLpsholdp (S n)  where
+  lpsholdp = mkOp2 "lpsholdp"
+
+
+instance  CsLpslot (S n)  where
+  lpslot = mkOp1 "lpslot"
+
+
+instance  CsMac (S n)  where
+  mac = mkOp1 "mac"
+
+
+instance  CsMaca (S n)  where
+  maca = mkOp1 "maca"
+
+
+instance (PVar out) => CsMadsr (S n) out where
+  madsr = mkOp4 "madsr"
+  madsr' = mkOp6 "madsr"
+
+
+instance  CsMandel (S n)  where
+  mandel = mkOp4 "mandel"
+
+
+instance  CsMandol (S n)  where
+  mandol = mkOp7 "mandol"
+  mandol' = mkOp8 "mandol"
+
+
+instance  CsMarimba (S n)  where
+  marimba = mkOp9 "marimba"
+  marimba' = mkOp11 "marimba"
+
+
+instance  CsMassign (S n)  where
+  massign = mkOp2 "massign"
+  massign' = mkOp3 "massign"
+
+
+instance  CsMax_k (S n)  where
+  max_k = mkOp3 "max_k"
+
+
+instance  CsMaxabsaccum (S n)  where
+  maxabsaccum = mkOp2 "maxabsaccum"
+
+
+instance  CsMaxaccum (S n)  where
+  maxaccum = mkOp2 "maxaccum"
+
+
+instance  CsMaxalloc (S n)  where
+  maxalloc = mkOp2 "maxalloc"
+
+
+instance  CsMaxk (S n)  where
+  maxk = mkOp3 "maxk"
+
+
+instance  CsMclock (S n)  where
+  mclock = mkOp1 "mclock"
+
+
+instance  CsMdelay (S n)  where
+  mdelay = mkOp5 "mdelay"
+
+
+instance  CsMedian (S n)  where
+  median = mkOp3 "median"
+  median' = mkOp4 "median"
+
+
+instance  CsMediank (S n)  where
+  mediank = mkOp3 "mediank"
+  mediank' = mkOp4 "mediank"
+
+
+instance  CsMetro (S n)  where
+  metro = mkOp1 "metro"
+  metro' = mkOp2 "metro"
+
+
+instance  CsMidglobal (S n)  where
+  midglobal = mkOp2 "midglobal"
+
+
+instance  CsMidic14 (S n) (KSig (S n)) where
+  midic14 = mkOp4 "midic14"
+  midic14' = mkOp5 "midic14"
+
+
+instance  CsMidic14 (S n) (INum (S n)) where
+  midic14 = mkOp4 "midic14"
+  midic14' = mkOp5 "midic14"
+
+
+instance  CsMidic21 (S n) (KSig (S n)) where
+  midic21 = mkOp5 "midic21"
+  midic21' = mkOp6 "midic21"
+
+
+instance  CsMidic21 (S n) (INum (S n)) where
+  midic21 = mkOp5 "midic21"
+  midic21' = mkOp6 "midic21"
+
+
+instance  CsMidic7 (S n) (KSig (S n)) where
+  midic7 = mkOp3 "midic7"
+  midic7' = mkOp4 "midic7"
+
+
+instance  CsMidic7 (S n) (INum (S n)) where
+  midic7 = mkOp3 "midic7"
+  midic7' = mkOp4 "midic7"
+
+
+instance (Varable a) => CsMidichannelaftertouch (S n) a where
+  midichannelaftertouch = mkOp1 "midichannelaftertouch"
+  midichannelaftertouch' = mkOp3 "midichannelaftertouch"
+
+
+instance  CsMidichn (S n)  where
+  midichn = mkOp0 "midichn"
+
+
+instance (Varable a, Varable b) => CsMidicontrolchange (S n) a b where
+  midicontrolchange = mkOp2 "midicontrolchange"
+  midicontrolchange' = mkOp4 "midicontrolchange"
+
+
+instance  CsMidictrl (S n) (KSig (S n)) where
+  midictrl = mkOp1 "midictrl"
+  midictrl' = mkOp3 "midictrl"
+
+
+instance  CsMidictrl (S n) (INum (S n)) where
+  midictrl = mkOp1 "midictrl"
+  midictrl' = mkOp3 "midictrl"
+
+
+instance (Varable a, Varable b) => CsMididefault (S n) a b where
+  mididefault = mkOp2 "mididefault"
+
+
+instance  CsMidiin (S n)  where
+  midiin = mkOp0 "midiin"
+
+
+instance (Varable a, Varable b) => CsMidinoteoff (S n) a b where
+  midinoteoff = mkOp2 "midinoteoff"
+
+
+instance (Varable a, Varable b) => CsMidinoteoncps (S n) a b where
+  midinoteoncps = mkOp2 "midinoteoncps"
+
+
+instance (Varable a, Varable b) => CsMidinoteonkey (S n) a b where
+  midinoteonkey = mkOp2 "midinoteonkey"
+
+
+instance (Varable a, Varable b) => CsMidinoteonoct (S n) a b where
+  midinoteonoct = mkOp2 "midinoteonoct"
+
+
+instance (Varable a, Varable b) => CsMidinoteonpch (S n) a b where
+  midinoteonpch = mkOp2 "midinoteonpch"
+
+
+instance  CsMidion (S n)  where
+  midion = mkOp3 "midion"
+
+
+instance  CsMidion2 (S n)  where
+  midion2 = mkOp4 "midion2"
+
+
+instance  CsMidiout (S n)  where
+  midiout = mkOp4 "midiout"
+
+
+instance  CsMidipgm (S n)  where
+  midipgm = mkOp0 "midipgm"
+  midipgm' = mkOp1 "midipgm"
+
+
+instance (Varable a) => CsMidipitchbend (S n) a where
+  midipitchbend = mkOp1 "midipitchbend"
+  midipitchbend' = mkOp3 "midipitchbend"
+
+
+instance (Varable a, Varable b) => CsMidipolyaftertouch (S n) a b where
+  midipolyaftertouch = mkOp2 "midipolyaftertouch"
+  midipolyaftertouch' = mkOp4 "midipolyaftertouch"
+
+
+instance (Varable a) => CsMidiprogramchange (S n) a where
+  midiprogramchange = mkOp1 "midiprogramchange"
+
+
+instance  CsMiditempo (S n)  where
+  miditempo = mkOp0 "miditempo"
+
+
+instance  CsMidremot (S n)  where
+  midremot = mkOp3 "midremot"
+
+
+instance  CsMinabsaccum (S n)  where
+  minabsaccum = mkOp2 "minabsaccum"
+
+
+instance  CsMinaccum (S n)  where
+  minaccum = mkOp2 "minaccum"
+
+
+instance (Nat d) => CsMincer (S n) d where
+  mincer = mkOp5 "mincer"
+  mincer' = mkOp7 "mincer"
+
+
+instance  CsMirror (S n) (ASig (S n)) (ASig (S n)) where
+  mirror = mkOp3 "mirror"
+
+
+instance  CsMirror (S n) (KSig (S n)) (KSig (S n)) where
+  mirror = mkOp3 "mirror"
+
+
+instance  CsMirror (S n) (INum (S n)) (INum (S n)) where
+  mirror = mkOp3 "mirror"
+
+
+instance (Varable a, Varable b) => CsMod (S n) (ASig (S n)) a b where
+  mod = mkOp2 "mod"
+
+
+instance  CsMod (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  mod = mkOp2 "mod"
+
+
+instance  CsMod (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  mod = mkOp2 "mod"
+
+
+instance  CsMode (S n)  where
+  mode = mkOp3 "mode"
+  mode' = mkOp4 "mode"
+
+
+instance  CsModmatrix (S n)  where
+  modmatrix = mkOp7 "modmatrix"
+
+
+instance (Nat d) => CsMonitor (S n) d where
+  monitor = mkOp0 "monitor"
+
+
+instance  CsMoog (S n)  where
+  moog = mkOp9 "moog"
+
+
+instance  CsMoogladder (S n)  where
+  moogladder = mkOp3 "moogladder"
+  moogladder' = mkOp4 "moogladder"
+
+
+instance (Varable a, Varable b) => CsMoogvcf (S n) a b where
+  moogvcf = mkOp3 "moogvcf"
+  moogvcf' = mkOp5 "moogvcf"
+
+
+instance (Varable a, Varable b) => CsMoogvcf2 (S n) a b where
+  moogvcf2 = mkOp3 "moogvcf2"
+  moogvcf2' = mkOp5 "moogvcf2"
+
+
+instance  CsMoscil (S n)  where
+  moscil = mkOp5 "moscil"
+
+
+instance  CsMpulse (S n)  where
+  mpulse = mkOp2 "mpulse"
+  mpulse' = mkOp3 "mpulse"
+
+
+instance  CsMrtmsg (S n)  where
+  mrtmsg = mkOp1 "mrtmsg"
+
+
+instance (Varable a, Varable b) => CsMul (S n) (ASig (S n)) a b where
+  mul = mkOp2 "mul"
+
+
+instance  CsMul (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  mul = mkOp2 "mul"
+
+
+instance  CsMul (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  mul = mkOp2 "mul"
+
+
+instance  CsMultitap (S n)  where
+  multitap = mkOp2 "multitap"
+
+
+instance  CsMute (S n)  where
+  mute = mkOp1 "mute"
+  mute' = mkOp2 "mute"
+
+
+instance  CsMutex_lock (S n)  where
+  mutex_lock = mkOp1 "mutex_lock"
+
+
+instance  CsMutex_locki (S n)  where
+  mutex_locki = mkOp1 "mutex_locki"
+
+
+instance  CsMutex_unlock (S n)  where
+  mutex_unlock = mkOp1 "mutex_unlock"
+
+
+instance  CsMutex_unlocki (S n)  where
+  mutex_unlocki = mkOp1 "mutex_unlocki"
+
+
+instance (PVar out) => CsMxadsr (S n) out where
+  mxadsr = mkOp4 "mxadsr"
+  mxadsr' = mkOp6 "mxadsr"
+
+
+instance  CsNestedap (S n)  where
+  nestedap = mkOp5 "nestedap"
+  nestedap' = mkOp10 "nestedap"
+
+
+instance  CsNlalp (S n)  where
+  nlalp = mkOp3 "nlalp"
+  nlalp' = mkOp5 "nlalp"
+
+
+instance  CsNlfilt (S n)  where
+  nlfilt = mkOp6 "nlfilt"
+
+
+instance (Varable a) => CsNoise (S n) a where
+  noise = mkOp2 "noise"
+
+
+instance  CsNot (S n) (ASig (S n)) (ASig (S n)) where
+  not = mkOp1 "not"
+
+
+instance  CsNot (S n) (KSig (S n)) (KSig (S n)) where
+  not = mkOp1 "not"
+
+
+instance  CsNot (S n) (INum (S n)) (INum (S n)) where
+  not = mkOp1 "not"
+
+
+instance  CsNoteoff (S n)  where
+  noteoff = mkOp3 "noteoff"
+
+
+instance  CsNoteon (S n)  where
+  noteon = mkOp3 "noteon"
+
+
+instance  CsNoteondur (S n)  where
+  noteondur = mkOp4 "noteondur"
+
+
+instance  CsNoteondur2 (S n)  where
+  noteondur2 = mkOp4 "noteondur2"
+
+
+instance  CsNotnum (S n)  where
+  notnum = mkOp0 "notnum"
+
+
+instance  CsNreverb (S n)  where
+  nreverb = mkOp3 "nreverb"
+  nreverb' = mkOp8 "nreverb"
+
+
+instance  CsNrpn (S n)  where
+  nrpn = mkOp3 "nrpn"
+
+
+instance  CsNsamp (S n)  where
+  nsamp = mkOp1 "nsamp"
+
+
+instance  CsNstrnum (S n)  where
+  nstrnum = mkOp1 "nstrnum"
+
+
+instance  CsNtrpol (S n) (ASig (S n)) (ASig (S n)) (ASig (S n)) where
+  ntrpol = mkOp3 "ntrpol"
+  ntrpol' = mkOp5 "ntrpol"
+
+
+instance  CsNtrpol (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  ntrpol = mkOp3 "ntrpol"
+  ntrpol' = mkOp5 "ntrpol"
+
+
+instance  CsNtrpol (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  ntrpol = mkOp3 "ntrpol"
+  ntrpol' = mkOp5 "ntrpol"
+
+
+instance  CsOctave (S n) (ASig (S n)) (ASig (S n)) where
+  octave = mkOp1 "octave"
+
+
+instance  CsOctave (S n) (KSig (S n)) (KSig (S n)) where
+  octave = mkOp1 "octave"
+
+
+instance  CsOctave (S n) (INum (S n)) (INum (S n)) where
+  octave = mkOp1 "octave"
+
+
+instance  CsOctcps (S n) (KSig (S n)) where
+  octcps = mkOp1 "octcps"
+
+
+instance  CsOctcps (S n) (INum (S n)) where
+  octcps = mkOp1 "octcps"
+
+
+instance  CsOctmidi (S n)  where
+  octmidi = mkOp0 "octmidi"
+
+
+instance  CsOctmidib (S n) (KSig (S n)) where
+  octmidib = mkOp0 "octmidib"
+  octmidib' = mkOp1 "octmidib"
+
+
+instance  CsOctmidib (S n) (INum (S n)) where
+  octmidib = mkOp0 "octmidib"
+  octmidib' = mkOp1 "octmidib"
+
+
+instance  CsOctmidinn (S n) (KSig (S n)) where
+  octmidinn = mkOp1 "octmidinn"
+
+
+instance  CsOctmidinn (S n) (INum (S n)) where
+  octmidinn = mkOp1 "octmidinn"
+
+
+instance  CsOctpch (S n) (KSig (S n)) where
+  octpch = mkOp1 "octpch"
+
+
+instance  CsOctpch (S n) (INum (S n)) where
+  octpch = mkOp1 "octpch"
+
+
+instance  CsOpcode (S n)  where
+  opcode = mkOp0 "opcode"
+
+
+instance (Varable a, Varable b) => CsOr (S n) (ASig (S n)) a b where
+  or = mkOp2 "or"
+
+
+instance  CsOr (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  or = mkOp2 "or"
+
+
+instance  CsOr (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  or = mkOp2 "or"
+
+
+instance  CsOscbnk (S n)  where
+  oscbnk = mkOp19 "oscbnk"
+  oscbnk' = mkOp26 "oscbnk"
+
+
+instance (Varable a, Varable b) => CSE.CsOscil (S n) (ASig (S n)) a b where
+  oscil = mkOp3 "oscil"
+  oscil' = mkOp4 "oscil"
+
+
+instance (PVar out) => CSE.CsOscil (S n) out (KSig (S n)) (KSig (S n)) where
+  oscil = mkOp3 "oscil"
+  oscil' = mkOp4 "oscil"
+
+
+instance  CsOscil1 (S n)  where
+  oscil1 = mkOp4 "oscil1"
+
+
+instance  CsOscil1i (S n)  where
+  oscil1i = mkOp4 "oscil1i"
+
+
+instance (Varable a, Varable b) => CsOscil3 (S n) (ASig (S n)) a b where
+  oscil3 = mkOp3 "oscil3"
+  oscil3' = mkOp4 "oscil3"
+
+
+instance (PVar out) => CsOscil3 (S n) out (KSig (S n)) (KSig (S n)) where
+  oscil3 = mkOp3 "oscil3"
+  oscil3' = mkOp4 "oscil3"
+
+
+instance (Varable a, Varable b) => CSE.CsOscili (S n) (ASig (S n)) a b where
+  oscili = mkOp3 "oscili"
+  oscili' = mkOp4 "oscili"
+
+
+instance (PVar out) => CSE.CsOscili (S n) out (KSig (S n)) (KSig (S n)) where
+  oscili = mkOp3 "oscili"
+  oscili' = mkOp4 "oscili"
+
+
+instance (Varable a, Varable b) => CsOscilikt (S n) (ASig (S n)) a b where
+  oscilikt = mkOp3 "oscilikt"
+  oscilikt' = mkOp5 "oscilikt"
+
+
+instance (PVar out) => CsOscilikt (S n) out (KSig (S n)) (KSig (S n)) where
+  oscilikt = mkOp3 "oscilikt"
+  oscilikt' = mkOp5 "oscilikt"
+
+
+instance  CsOsciliktp (S n)  where
+  osciliktp = mkOp3 "osciliktp"
+  osciliktp' = mkOp4 "osciliktp"
+
+
+instance (Varable a, Varable b) => CsOscilikts (S n) a b where
+  oscilikts = mkOp5 "oscilikts"
+  oscilikts' = mkOp6 "oscilikts"
+
+
+instance  CsOsciln (S n)  where
+  osciln = mkOp4 "osciln"
+
+
+instance  CsOscils (S n)  where
+  oscils = mkOp3 "oscils"
+  oscils' = mkOp4 "oscils"
+
+
+instance  CsOscilx (S n)  where
+  oscilx = mkOp4 "oscilx"
+
+
+instance  CsOut32 (S n)  where
+  out32 = mkOp32 "out32"
+
+
+instance  CsOutc (S n)  where
+  outc = mkOp1 "outc"
+
+
+instance  CsOutch (S n)  where
+  outch = mkOp1 "outch"
+
+
+instance  CsOuth (S n)  where
+  outh = mkOp6 "outh"
+
+
+instance  CsOutiat (S n)  where
+  outiat = mkOp4 "outiat"
+
+
+instance  CsOutic (S n)  where
+  outic = mkOp5 "outic"
+
+
+instance  CsOutic14 (S n)  where
+  outic14 = mkOp6 "outic14"
+
+
+instance  CsOutipat (S n)  where
+  outipat = mkOp5 "outipat"
+
+
+instance  CsOutipb (S n)  where
+  outipb = mkOp4 "outipb"
+
+
+instance  CsOutipc (S n)  where
+  outipc = mkOp4 "outipc"
+
+
+instance  CsOutkat (S n)  where
+  outkat = mkOp4 "outkat"
+
+
+instance  CsOutkc (S n)  where
+  outkc = mkOp5 "outkc"
+
+
+instance  CsOutkc14 (S n)  where
+  outkc14 = mkOp6 "outkc14"
+
+
+instance  CsOutkpat (S n)  where
+  outkpat = mkOp5 "outkpat"
+
+
+instance  CsOutkpb (S n)  where
+  outkpb = mkOp4 "outkpb"
+
+
+instance  CsOutkpc (S n)  where
+  outkpc = mkOp4 "outkpc"
+
+
+instance  CsOutleta (S n)  where
+  outleta = mkOp2 "outleta"
+
+
+instance  CsOutletf (S n)  where
+  outletf = mkOp2 "outletf"
+
+
+instance  CsOutletk (S n)  where
+  outletk = mkOp2 "outletk"
+
+
+instance  CsOutq1 (S n)  where
+  outq1 = mkOp1 "outq1"
+
+
+instance  CsOutq2 (S n)  where
+  outq2 = mkOp1 "outq2"
+
+
+instance  CsOutq3 (S n)  where
+  outq3 = mkOp1 "outq3"
+
+
+instance  CsOutq4 (S n)  where
+  outq4 = mkOp1 "outq4"
+
+
+instance  CsOutrg (S n)  where
+  outrg = mkOp2 "outrg"
+
+
+instance  CsOuts1 (S n)  where
+  outs1 = mkOp1 "outs1"
+
+
+instance  CsOuts2 (S n)  where
+  outs2 = mkOp1 "outs2"
+
+
+instance  CsOutx (S n)  where
+  outx = mkOp16 "outx"
+
+
+instance  CsOutz (S n)  where
+  outz = mkOp1 "outz"
+
+
+instance  CsP (S n) (KSig (S n)) where
+  p = mkOp1 "p"
+
+
+instance  CsP (S n) (INum (S n)) where
+  p = mkOp1 "p"
+
+
+instance  CsPan (S n)  where
+  pan = mkOp4 "pan"
+  pan' = mkOp6 "pan"
+
+
+instance (Varable a) => CsPan2 (S n) a where
+  pan2 = mkOp2 "pan2"
+  pan2' = mkOp3 "pan2"
+
+
+instance  CsPareq (S n)  where
+  pareq = mkOp4 "pareq"
+  pareq' = mkOp6 "pareq"
+
+
+instance  CsPartials (S n)  where
+  partials = mkOp6 "partials"
+
+
+instance  CsPcauchy (S n) (ASig (S n)) where
+  pcauchy = mkOp1 "pcauchy"
+
+
+instance  CsPcauchy (S n) (KSig (S n)) where
+  pcauchy = mkOp1 "pcauchy"
+
+
+instance  CsPcauchy (S n) (INum (S n)) where
+  pcauchy = mkOp1 "pcauchy"
+
+
+instance  CsPchbend (S n) (KSig (S n)) where
+  pchbend = mkOp0 "pchbend"
+  pchbend' = mkOp2 "pchbend"
+
+
+instance  CsPchbend (S n) (INum (S n)) where
+  pchbend = mkOp0 "pchbend"
+  pchbend' = mkOp2 "pchbend"
+
+
+instance  CsPchmidi (S n)  where
+  pchmidi = mkOp0 "pchmidi"
+
+
+instance  CsPchmidib (S n) (KSig (S n)) where
+  pchmidib = mkOp0 "pchmidib"
+  pchmidib' = mkOp1 "pchmidib"
+
+
+instance  CsPchmidib (S n) (INum (S n)) where
+  pchmidib = mkOp0 "pchmidib"
+  pchmidib' = mkOp1 "pchmidib"
+
+
+instance  CsPchmidinn (S n) (KSig (S n)) where
+  pchmidinn = mkOp1 "pchmidinn"
+
+
+instance  CsPchmidinn (S n) (INum (S n)) where
+  pchmidinn = mkOp1 "pchmidinn"
+
+
+instance  CsPchoct (S n) (KSig (S n)) where
+  pchoct = mkOp1 "pchoct"
+
+
+instance  CsPchoct (S n) (INum (S n)) where
+  pchoct = mkOp1 "pchoct"
+
+
+instance (Nat d) => CsPconvolve (S n) d where
+  pconvolve = mkOp2 "pconvolve"
+  pconvolve' = mkOp4 "pconvolve"
+
+
+instance  CsPcount (S n)  where
+  pcount = mkOp0 "pcount"
+
+
+instance  CsPdclip (S n)  where
+  pdclip = mkOp3 "pdclip"
+  pdclip' = mkOp5 "pdclip"
+
+
+instance  CsPdhalf (S n)  where
+  pdhalf = mkOp2 "pdhalf"
+  pdhalf' = mkOp4 "pdhalf"
+
+
+instance  CsPdhalfy (S n)  where
+  pdhalfy = mkOp2 "pdhalfy"
+  pdhalfy' = mkOp4 "pdhalfy"
+
+
+instance (Varable a) => CsPeak (S n) a where
+  peak = mkOp1 "peak"
+
+
+instance  CsPgmassign (S n)  where
+  pgmassign = mkOp2 "pgmassign"
+  pgmassign' = mkOp3 "pgmassign"
+
+
+instance  CsPgmchn (S n)  where
+  pgmchn = mkOp0 "pgmchn"
+  pgmchn' = mkOp1 "pgmchn"
+
+
+instance  CsPhaser1 (S n)  where
+  phaser1 = mkOp4 "phaser1"
+  phaser1' = mkOp5 "phaser1"
+
+
+instance  CsPhaser2 (S n)  where
+  phaser2 = mkOp7 "phaser2"
+
+
+instance (PVar out, Varable a) => CsPhasorbnk (S n) out a where
+  phasorbnk = mkOp3 "phasorbnk"
+  phasorbnk' = mkOp4 "phasorbnk"
+
+
+instance  CsPindex (S n)  where
+  pindex = mkOp1 "pindex"
+
+
+instance (Varable a) => CsPinkish (S n) a where
+  pinkish = mkOp1 "pinkish"
+  pinkish' = mkOp5 "pinkish"
+
+
+instance  CsPitch (S n)  where
+  pitch = mkOp5 "pitch"
+  pitch' = mkOp13 "pitch"
+
+
+instance  CsPitchac (S n)  where
+  pitchac = mkOp4 "pitchac"
+
+
+instance  CsPitchamdf (S n)  where
+  pitchamdf = mkOp3 "pitchamdf"
+  pitchamdf' = mkOp8 "pitchamdf"
+
+
+instance  CsPlanet (S n)  where
+  planet = mkOp10 "planet"
+  planet' = mkOp12 "planet"
+
+
+instance  CsPluck (S n)  where
+  pluck = mkOp5 "pluck"
+  pluck' = mkOp7 "pluck"
+
+
+instance  CsPoisson (S n) (ASig (S n)) where
+  poisson = mkOp1 "poisson"
+
+
+instance  CsPoisson (S n) (KSig (S n)) where
+  poisson = mkOp1 "poisson"
+
+
+instance  CsPoisson (S n) (INum (S n)) where
+  poisson = mkOp1 "poisson"
+
+
+instance  CsPolyaft (S n) (KSig (S n)) where
+  polyaft = mkOp1 "polyaft"
+  polyaft' = mkOp3 "polyaft"
+
+
+instance  CsPolyaft (S n) (INum (S n)) where
+  polyaft = mkOp1 "polyaft"
+  polyaft' = mkOp3 "polyaft"
+
+
+instance  CsPolynomial (S n)  where
+  polynomial = mkOp2 "polynomial"
+
+
+instance  CsPop_f (S n)  where
+  pop_f = mkOp0 "pop_f"
+
+
+instance  CsPort (S n)  where
+  port = mkOp2 "port"
+  port' = mkOp3 "port"
+
+
+instance  CsPortk (S n)  where
+  portk = mkOp2 "portk"
+  portk' = mkOp3 "portk"
+
+
+instance (Varable a, Varable b) => CsPoscil (S n) (ASig (S n)) a b where
+  poscil = mkOp3 "poscil"
+  poscil' = mkOp4 "poscil"
+
+
+instance (PVar out) => CsPoscil (S n) out (KSig (S n)) (KSig (S n)) where
+  poscil = mkOp3 "poscil"
+  poscil' = mkOp4 "poscil"
+
+
+instance (PVar out) => CsPoscil3 (S n) out where
+  poscil3 = mkOp3 "poscil3"
+  poscil3' = mkOp4 "poscil3"
+
+
+instance  CsPow (S n) (ASig (S n)) (ASig (S n)) where
+  pow = mkOp2 "pow"
+  pow' = mkOp3 "pow"
+
+
+instance  CsPow (S n) (KSig (S n)) (KSig (S n)) where
+  pow = mkOp2 "pow"
+  pow' = mkOp3 "pow"
+
+
+instance  CsPow (S n) (INum (S n)) (INum (S n)) where
+  pow = mkOp2 "pow"
+  pow' = mkOp3 "pow"
+
+
+instance  CsPowershape (S n)  where
+  powershape = mkOp2 "powershape"
+  powershape' = mkOp3 "powershape"
+
+
+instance  CsPowoftwo (S n) (ASig (S n)) (ASig (S n)) where
+  powoftwo = mkOp1 "powoftwo"
+
+
+instance  CsPowoftwo (S n) (KSig (S n)) (KSig (S n)) where
+  powoftwo = mkOp1 "powoftwo"
+
+
+instance  CsPowoftwo (S n) (INum (S n)) (INum (S n)) where
+  powoftwo = mkOp1 "powoftwo"
+
+
+instance  CsPrealloc (S n)  where
+  prealloc = mkOp2 "prealloc"
+  prealloc' = mkOp3 "prealloc"
+
+
+instance (Nat d) => CsPrepiano (S n) d where
+  prepiano = mkOp15 "prepiano"
+  prepiano' = mkOp17 "prepiano"
+
+
+instance  CsPrint (S n)  where
+  print = mkOp1 "print"
+
+
+instance  CsPrintf_i (S n)  where
+  printf_i = mkOp4 "printf_i"
+
+
+instance  CsPrintk (S n)  where
+  printk = mkOp2 "printk"
+  printk' = mkOp3 "printk"
+
+
+instance  CsPrintk2 (S n)  where
+  printk2 = mkOp1 "printk2"
+  printk2' = mkOp2 "printk2"
+
+
+instance (Varable a) => CsPrintks (S n) a where
+  printks = mkOp3 "printks"
+
+
+instance (Varable a) => CsPrints (S n) a where
+  prints = mkOp2 "prints"
+
+
+instance  CsProduct (S n)  where
+  product = mkOp1 "product"
+
+
+instance  CsPset (S n)  where
+  pset = mkOp1 "pset"
+
+
+instance  CsPtrack (S n)  where
+  ptrack = mkOp2 "ptrack"
+  ptrack' = mkOp3 "ptrack"
+
+
+instance  CsPush (S n)  where
+  push = mkOp1 "push"
+
+
+instance  CsPush_f (S n)  where
+  push_f = mkOp1 "push_f"
+
+
+instance  CsPuts (S n)  where
+  puts = mkOp2 "puts"
+  puts' = mkOp3 "puts"
+
+
+instance  CsPvadd (S n)  where
+  pvadd = mkOp5 "pvadd"
+  pvadd' = mkOp10 "pvadd"
+
+
+instance  CsPvbufread (S n)  where
+  pvbufread = mkOp2 "pvbufread"
+
+
+instance  CsPvcross (S n)  where
+  pvcross = mkOp5 "pvcross"
+  pvcross' = mkOp6 "pvcross"
+
+
+instance  CsPvinterp (S n)  where
+  pvinterp = mkOp9 "pvinterp"
+
+
+instance  CsPvoc (S n)  where
+  pvoc = mkOp3 "pvoc"
+  pvoc' = mkOp7 "pvoc"
+
+
+instance  CsPvread (S n)  where
+  pvread = mkOp3 "pvread"
+
+
+instance  CsPvsadsyn (S n)  where
+  pvsadsyn = mkOp3 "pvsadsyn"
+  pvsadsyn' = mkOp6 "pvsadsyn"
+
+
+instance  CsPvsanal (S n)  where
+  pvsanal = mkOp5 "pvsanal"
+  pvsanal' = mkOp7 "pvsanal"
+
+
+instance  CsPvsarp (S n)  where
+  pvsarp = mkOp4 "pvsarp"
+
+
+instance (Varable a, Varable b, Varable c, Varable d, KVar e) => CsPvsbandp (S n) a b c d e where
+  pvsbandp = mkOp5 "pvsbandp"
+  pvsbandp' = mkOp6 "pvsbandp"
+
+
+instance (Varable a, Varable b, Varable c, Varable d, KVar e) => CsPvsbandr (S n) a b c d e where
+  pvsbandr = mkOp5 "pvsbandr"
+  pvsbandr' = mkOp6 "pvsbandr"
+
+
+instance (PVar out) => CsPvsbin (S n) out where
+  pvsbin = mkOp2 "pvsbin"
+
+
+instance  CsPvsblur (S n)  where
+  pvsblur = mkOp3 "pvsblur"
+
+
+instance  CsPvsbuffer (S n)  where
+  pvsbuffer = mkOp2 "pvsbuffer"
+
+
+instance (KVar a, KVar b) => CsPvsbufread (S n) a b where
+  pvsbufread = mkOp2 "pvsbufread"
+  pvsbufread' = mkOp5 "pvsbufread"
+
+
+instance (PVar out) => CsPvscent (S n) out where
+  pvscent = mkOp1 "pvscent"
+
+
+instance  CsPvscross (S n)  where
+  pvscross = mkOp4 "pvscross"
+
+
+instance  CsPvsdemix (S n)  where
+  pvsdemix = mkOp5 "pvsdemix"
+
+
+instance  CsPvsdisp (S n)  where
+  pvsdisp = mkOp1 "pvsdisp"
+  pvsdisp' = mkOp3 "pvsdisp"
+
+
+instance (Varable a) => CsPvsfilter (S n) a where
+  pvsfilter = mkOp3 "pvsfilter"
+  pvsfilter' = mkOp4 "pvsfilter"
+
+
+instance  CsPvsfread (S n)  where
+  pvsfread = mkOp2 "pvsfread"
+  pvsfread' = mkOp3 "pvsfread"
+
+
+instance  CsPvsfreeze (S n)  where
+  pvsfreeze = mkOp3 "pvsfreeze"
+
+
+instance  CsPvsftr (S n)  where
+  pvsftr = mkOp2 "pvsftr"
+  pvsftr' = mkOp3 "pvsftr"
+
+
+instance  CsPvsftw (S n)  where
+  pvsftw = mkOp2 "pvsftw"
+  pvsftw' = mkOp3 "pvsftw"
+
+
+instance  CsPvsfwrite (S n)  where
+  pvsfwrite = mkOp2 "pvsfwrite"
+
+
+instance (Varable a, KVar b, KVar c, KVar d) => CsPvshift (S n) a b c d where
+  pvshift = mkOp3 "pvshift"
+  pvshift' = mkOp6 "pvshift"
+
+
+instance  CsPvsifd (S n)  where
+  pvsifd = mkOp4 "pvsifd"
+  pvsifd' = mkOp5 "pvsifd"
+
+
+instance  CsPvsin (S n)  where
+  pvsin = mkOp1 "pvsin"
+  pvsin' = mkOp6 "pvsin"
+
+
+instance  CsPvsinfo (S n)  where
+  pvsinfo = mkOp1 "pvsinfo"
+
+
+instance  CsPvsinit (S n)  where
+  pvsinit = mkOp1 "pvsinit"
+  pvsinit' = mkOp5 "pvsinit"
+
+
+instance  CsPvslock (S n)  where
+  pvslock = mkOp2 "pvslock"
+
+
+instance  CsPvsmaska (S n)  where
+  pvsmaska = mkOp3 "pvsmaska"
+
+
+instance  CsPvsmix (S n)  where
+  pvsmix = mkOp2 "pvsmix"
+
+
+instance (Varable a, Varable b) => CsPvsmooth (S n) a b where
+  pvsmooth = mkOp3 "pvsmooth"
+
+
+instance  CsPvsmorph (S n)  where
+  pvsmorph = mkOp4 "pvsmorph"
+
+
+instance  CsPvsosc (S n)  where
+  pvsosc = mkOp4 "pvsosc"
+  pvsosc' = mkOp8 "pvsosc"
+
+
+instance  CsPvsout (S n)  where
+  pvsout = mkOp2 "pvsout"
+
+
+instance  CsPvspitch (S n)  where
+  pvspitch = mkOp2 "pvspitch"
+
+
+instance  CsPvstencil (S n)  where
+  pvstencil = mkOp4 "pvstencil"
+
+
+instance (KVar a) => CsPvsvoc (S n) a where
+  pvsvoc = mkOp4 "pvsvoc"
+  pvsvoc' = mkOp5 "pvsvoc"
+
+
+instance  CsPvsynth (S n)  where
+  pvsynth = mkOp1 "pvsynth"
+  pvsynth' = mkOp2 "pvsynth"
+
+
+instance (PVar out, Varable a) => CsRand (S n) out a where
+  rand = mkOp1 "rand"
+  rand' = mkOp4 "rand"
+
+
+instance (PVar out, Varable a, Varable b) => CsRandh (S n) out a b where
+  randh = mkOp2 "randh"
+  randh' = mkOp5 "randh"
+
+
+instance (PVar out, Varable a, Varable b) => CsRandi (S n) out a b where
+  randi = mkOp2 "randi"
+  randi' = mkOp5 "randi"
+
+
+instance  CsRandom (S n) (ASig (S n)) where
+  random = mkOp2 "random"
+
+
+instance  CsRandom (S n) (KSig (S n)) where
+  random = mkOp2 "random"
+
+
+instance  CsRandom (S n) (INum (S n)) where
+  random = mkOp2 "random"
+
+
+instance (PVar out, Varable a) => CsRandomh (S n) out a where
+  randomh = mkOp3 "randomh"
+
+
+instance (PVar out, Varable a) => CsRandomi (S n) out a where
+  randomi = mkOp3 "randomi"
+
+
+instance  CsRbjeq (S n)  where
+  rbjeq = mkOp5 "rbjeq"
+  rbjeq' = mkOp6 "rbjeq"
+
+
+instance  CsReadclock (S n)  where
+  readclock = mkOp1 "readclock"
+
+
+instance  CsReadk (S n)  where
+  readk = mkOp3 "readk"
+
+
+instance  CsReadk2 (S n)  where
+  readk2 = mkOp3 "readk2"
+
+
+instance  CsReadk3 (S n)  where
+  readk3 = mkOp3 "readk3"
+
+
+instance  CsReadk4 (S n)  where
+  readk4 = mkOp3 "readk4"
+
+
+instance  CsReadks (S n)  where
+  readks = mkOp2 "readks"
+
+
+instance  CsRelease (S n)  where
+  release = mkOp0 "release"
+
+
+instance  CsRemoteport (S n)  where
+  remoteport = mkOp1 "remoteport"
+
+
+instance  CsRemove (S n)  where
+  remove = mkOp1 "remove"
+
+
+instance  CsRepluck (S n)  where
+  repluck = mkOp6 "repluck"
+
+
+instance  CsReson (S n)  where
+  reson = mkOp3 "reson"
+  reson' = mkOp5 "reson"
+
+
+instance  CsResonk (S n)  where
+  resonk = mkOp3 "resonk"
+  resonk' = mkOp5 "resonk"
+
+
+instance  CsResonr (S n)  where
+  resonr = mkOp3 "resonr"
+  resonr' = mkOp5 "resonr"
+
+
+instance  CsResonx (S n)  where
+  resonx = mkOp3 "resonx"
+  resonx' = mkOp6 "resonx"
+
+
+instance  CsResonxk (S n)  where
+  resonxk = mkOp3 "resonxk"
+  resonxk' = mkOp6 "resonxk"
+
+
+instance  CsResony (S n)  where
+  resony = mkOp5 "resony"
+  resony' = mkOp8 "resony"
+
+
+instance  CsResonz (S n)  where
+  resonz = mkOp3 "resonz"
+  resonz' = mkOp5 "resonz"
+
+
+instance  CsResyn (S n)  where
+  resyn = mkOp5 "resyn"
+
+
+instance  CsReverb (S n)  where
+  reverb = mkOp2 "reverb"
+  reverb' = mkOp3 "reverb"
+
+
+instance  CsReverb2 (S n)  where
+  reverb2 = mkOp3 "reverb2"
+  reverb2' = mkOp8 "reverb2"
+
+
+instance  CsReverbsc (S n)  where
+  reverbsc = mkOp4 "reverbsc"
+  reverbsc' = mkOp7 "reverbsc"
+
+
+instance  CsRewindscore (S n)  where
+  rewindscore = mkOp0 "rewindscore"
+
+
+instance (Varable a, Varable b) => CsRezzy (S n) a b where
+  rezzy = mkOp3 "rezzy"
+  rezzy' = mkOp5 "rezzy"
+
+
+instance  CsRireturn (S n)  where
+  rireturn = mkOp0 "rireturn"
+
+
+instance  CsRms (S n)  where
+  rms = mkOp1 "rms"
+  rms' = mkOp3 "rms"
+
+
+instance  CsRnd (S n) (KSig (S n)) where
+  rnd = mkOp1 "rnd"
+
+
+instance  CsRnd (S n) (INum (S n)) where
+  rnd = mkOp1 "rnd"
+
+
+instance  CsRnd31 (S n) (ASig (S n)) where
+  rnd31 = mkOp2 "rnd31"
+  rnd31' = mkOp3 "rnd31"
+
+
+instance  CsRnd31 (S n) (KSig (S n)) where
+  rnd31 = mkOp2 "rnd31"
+  rnd31' = mkOp3 "rnd31"
+
+
+instance  CsRnd31 (S n) (INum (S n)) where
+  rnd31 = mkOp2 "rnd31"
+  rnd31' = mkOp3 "rnd31"
+
+
+instance  CsRound (S n) (ASig (S n)) (ASig (S n)) where
+  round = mkOp1 "round"
+
+
+instance  CsRound (S n) (KSig (S n)) (KSig (S n)) where
+  round = mkOp1 "round"
+
+
+instance  CsRound (S n) (INum (S n)) (INum (S n)) where
+  round = mkOp1 "round"
+
+
+instance (PVar out, Varable a, Varable b) => CsRspline (S n) out a b where
+  rspline = mkOp4 "rspline"
+
+
+instance  CsRtclock (S n) (KSig (S n)) where
+  rtclock = mkOp0 "rtclock"
+
+
+instance  CsRtclock (S n) (INum (S n)) where
+  rtclock = mkOp0 "rtclock"
+
+
+instance (PVar out, Varable a, Varable b) => CsSamphold (S n) out a b where
+  samphold = mkOp2 "samphold"
+  samphold' = mkOp4 "samphold"
+
+
+instance  CsSandpaper (S n)  where
+  sandpaper = mkOp2 "sandpaper"
+  sandpaper' = mkOp5 "sandpaper"
+
+
+instance  CsScale (S n)  where
+  scale = mkOp3 "scale"
+
+
+instance  CsScanhammer (S n)  where
+  scanhammer = mkOp4 "scanhammer"
+
+
+instance  CsScans (S n)  where
+  scans = mkOp4 "scans"
+  scans' = mkOp5 "scans"
+
+
+instance  CsScantable (S n)  where
+  scantable = mkOp7 "scantable"
+
+
+instance  CsScanu (S n)  where
+  scanu = mkOp18 "scanu"
+
+
+instance  CsSchedule (S n)  where
+  schedule = mkOp4 "schedule"
+
+
+instance  CsSchedwhen (S n)  where
+  schedwhen = mkOp5 "schedwhen"
+
+
+instance  CsScoreline (S n)  where
+  scoreline = mkOp2 "scoreline"
+
+
+instance  CsScoreline_i (S n)  where
+  scoreline_i = mkOp1 "scoreline_i"
+
+
+instance  CsSeed (S n)  where
+  seed = mkOp1 "seed"
+
+
+instance  CsSekere (S n)  where
+  sekere = mkOp2 "sekere"
+  sekere' = mkOp5 "sekere"
+
+
+instance  CsSemitone (S n) (ASig (S n)) (ASig (S n)) where
+  semitone = mkOp1 "semitone"
+
+
+instance  CsSemitone (S n) (KSig (S n)) (KSig (S n)) where
+  semitone = mkOp1 "semitone"
+
+
+instance  CsSemitone (S n) (INum (S n)) (INum (S n)) where
+  semitone = mkOp1 "semitone"
+
+
+instance  CsSeqtime (S n)  where
+  seqtime = mkOp5 "seqtime"
+
+
+instance  CsSeqtime2 (S n)  where
+  seqtime2 = mkOp6 "seqtime2"
+
+
+instance  CsSetctrl (S n)  where
+  setctrl = mkOp3 "setctrl"
+
+
+instance  CsSetksmps (S n)  where
+  setksmps = mkOp1 "setksmps"
+
+
+instance  CsSetscorepos (S n)  where
+  setscorepos = mkOp1 "setscorepos"
+
+
+instance  CsSfilist (S n)  where
+  sfilist = mkOp1 "sfilist"
+
+
+instance (Varable a, Varable b) => CsSfinstr (S n) a b where
+  sfinstr = mkOp6 "sfinstr"
+  sfinstr' = mkOp9 "sfinstr"
+
+
+instance (Varable a, Varable b) => CsSfinstr3 (S n) a b where
+  sfinstr3 = mkOp6 "sfinstr3"
+  sfinstr3' = mkOp9 "sfinstr3"
+
+
+instance (Varable a, Varable b) => CsSfinstr3m (S n) a b where
+  sfinstr3m = mkOp6 "sfinstr3m"
+  sfinstr3m' = mkOp9 "sfinstr3m"
+
+
+instance (Varable a, Varable b) => CsSfinstrm (S n) a b where
+  sfinstrm = mkOp6 "sfinstrm"
+  sfinstrm' = mkOp9 "sfinstrm"
+
+
+instance  CsSfload (S n)  where
+  sfload = mkOp1 "sfload"
+
+
+instance  CsSflooper (S n)  where
+  sflooper = mkOp8 "sflooper"
+  sflooper' = mkOp12 "sflooper"
+
+
+instance  CsSfpassign (S n)  where
+  sfpassign = mkOp2 "sfpassign"
+  sfpassign' = mkOp3 "sfpassign"
+
+
+instance (Varable a, Varable b) => CsSfplay (S n) a b where
+  sfplay = mkOp5 "sfplay"
+  sfplay' = mkOp8 "sfplay"
+
+
+instance (Varable a, Varable b) => CsSfplay3 (S n) a b where
+  sfplay3 = mkOp5 "sfplay3"
+  sfplay3' = mkOp8 "sfplay3"
+
+
+instance (Varable a, Varable b) => CsSfplay3m (S n) a b where
+  sfplay3m = mkOp5 "sfplay3m"
+  sfplay3m' = mkOp8 "sfplay3m"
+
+
+instance (Varable a, Varable b) => CsSfplaym (S n) a b where
+  sfplaym = mkOp5 "sfplaym"
+  sfplaym' = mkOp8 "sfplaym"
+
+
+instance  CsSfplist (S n)  where
+  sfplist = mkOp1 "sfplist"
+
+
+instance  CsSfpreset (S n)  where
+  sfpreset = mkOp4 "sfpreset"
+
+
+instance  CsShaker (S n)  where
+  shaker = mkOp5 "shaker"
+  shaker' = mkOp6 "shaker"
+
+
+instance (Varable a, Varable b) => CsShl (S n) (ASig (S n)) a b where
+  shl = mkOp2 "shl"
+
+
+instance  CsShl (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  shl = mkOp2 "shl"
+
+
+instance  CsShl (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  shl = mkOp2 "shl"
+
+
+instance (Varable a, Varable b) => CsShr (S n) (ASig (S n)) a b where
+  shr = mkOp2 "shr"
+
+
+instance  CsShr (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  shr = mkOp2 "shr"
+
+
+instance  CsShr (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  shr = mkOp2 "shr"
+
+
+instance  CsSin (S n) (ASig (S n)) (ASig (S n)) where
+  sin = mkOp1 "sin"
+
+
+instance  CsSin (S n) (KSig (S n)) (KSig (S n)) where
+  sin = mkOp1 "sin"
+
+
+instance  CsSin (S n) (INum (S n)) (INum (S n)) where
+  sin = mkOp1 "sin"
+
+
+instance  CsSinh (S n) (ASig (S n)) (ASig (S n)) where
+  sinh = mkOp1 "sinh"
+
+
+instance  CsSinh (S n) (KSig (S n)) (KSig (S n)) where
+  sinh = mkOp1 "sinh"
+
+
+instance  CsSinh (S n) (INum (S n)) (INum (S n)) where
+  sinh = mkOp1 "sinh"
+
+
+instance  CsSininv (S n) (ASig (S n)) (ASig (S n)) where
+  sininv = mkOp1 "sininv"
+
+
+instance  CsSininv (S n) (KSig (S n)) (KSig (S n)) where
+  sininv = mkOp1 "sininv"
+
+
+instance  CsSininv (S n) (INum (S n)) (INum (S n)) where
+  sininv = mkOp1 "sininv"
+
+
+instance  CsSinsyn (S n)  where
+  sinsyn = mkOp4 "sinsyn"
+
+
+instance  CsSleighbells (S n)  where
+  sleighbells = mkOp2 "sleighbells"
+  sleighbells' = mkOp8 "sleighbells"
+
+
+instance  CsSlider16table (S n)  where
+  slider16table = mkOp83 "slider16table"
+
+
+instance  CsSlider16tablef (S n)  where
+  slider16tablef = mkOp99 "slider16tablef"
+
+
+instance  CsSlider8table (S n)  where
+  slider8table = mkOp43 "slider8table"
+
+
+instance  CsSlider8tablef (S n)  where
+  slider8tablef = mkOp51 "slider8tablef"
+
+
+instance  CsSndload (S n)  where
+  sndload = mkOp1 "sndload"
+  sndload' = mkOp10 "sndload"
+
+
+instance  CsSndloop (S n)  where
+  sndloop = mkOp5 "sndloop"
+
+
+instance (Nat d, Varable a, Varable b, Varable c) => CsSndwarp (S n) d a b c where
+  sndwarp = mkOp10 "sndwarp"
+
+
+instance (Nat d, Varable a, Varable b, Varable c) => CsSndwarpst (S n) d a b c where
+  sndwarpst = mkOp10 "sndwarpst"
+
+
+instance  CsSockrecv (S n)  where
+  sockrecv = mkOp2 "sockrecv"
+
+
+instance  CsSockrecvs (S n)  where
+  sockrecvs = mkOp2 "sockrecvs"
+
+
+instance  CsSocksend (S n)  where
+  socksend = mkOp4 "socksend"
+
+
+instance  CsSocksends (S n)  where
+  socksends = mkOp5 "socksends"
+
+
+instance (Nat d) => CsSoundin (S n) d where
+  soundin = mkOp1 "soundin"
+  soundin' = mkOp5 "soundin"
+
+
+instance  CsSoundout (S n)  where
+  soundout = mkOp2 "soundout"
+  soundout' = mkOp3 "soundout"
+
+
+instance  CsSoundouts (S n)  where
+  soundouts = mkOp3 "soundouts"
+  soundouts' = mkOp4 "soundouts"
+
+
+instance  CsSpace (S n)  where
+  space = mkOp6 "space"
+
+
+instance  CsSpat3d (S n)  where
+  spat3d = mkOp9 "spat3d"
+  spat3d' = mkOp10 "spat3d"
+
+
+instance  CsSpat3di (S n)  where
+  spat3di = mkOp7 "spat3di"
+  spat3di' = mkOp8 "spat3di"
+
+
+instance  CsSpat3dt (S n)  where
+  spat3dt = mkOp8 "spat3dt"
+  spat3dt' = mkOp9 "spat3dt"
+
+
+instance  CsSpdist (S n)  where
+  spdist = mkOp4 "spdist"
+
+
+instance  CsSplitrig (S n)  where
+  splitrig = mkOp5 "splitrig"
+
+
+instance  CsSprintf (S n)  where
+  sprintf = mkOp3 "sprintf"
+
+
+instance  CsSpsend (S n)  where
+  spsend = mkOp0 "spsend"
+
+
+instance  CsSqrt (S n) (ASig (S n)) (ASig (S n)) where
+  sqrt = mkOp1 "sqrt"
+
+
+instance  CsSqrt (S n) (KSig (S n)) (KSig (S n)) where
+  sqrt = mkOp1 "sqrt"
+
+
+instance  CsSqrt (S n) (INum (S n)) (INum (S n)) where
+  sqrt = mkOp1 "sqrt"
+
+
+instance  CsStack (S n)  where
+  stack = mkOp1 "stack"
+
+
+instance  CsStatevar (S n)  where
+  statevar = mkOp3 "statevar"
+  statevar' = mkOp5 "statevar"
+
+
+instance  CsStix (S n)  where
+  stix = mkOp2 "stix"
+  stix' = mkOp5 "stix"
+
+
+instance  CsStrcat (S n)  where
+  strcat = mkOp2 "strcat"
+
+
+instance  CsStrcatk (S n)  where
+  strcatk = mkOp2 "strcatk"
+
+
+instance  CsStrchar (S n)  where
+  strchar = mkOp1 "strchar"
+  strchar' = mkOp2 "strchar"
+
+
+instance (KVar a) => CsStrchark (S n) a where
+  strchark = mkOp1 "strchark"
+  strchark' = mkOp2 "strchark"
+
+
+instance  CsStrcmp (S n)  where
+  strcmp = mkOp2 "strcmp"
+
+
+instance  CsStrcmpk (S n)  where
+  strcmpk = mkOp2 "strcmpk"
+
+
+instance  CsStrcpy (S n)  where
+  strcpy = mkOp1 "strcpy"
+
+
+instance  CsStrcpyk (S n)  where
+  strcpyk = mkOp1 "strcpyk"
+
+
+instance  CsStrecv (S n)  where
+  strecv = mkOp2 "strecv"
+
+
+instance  CsStreson (S n)  where
+  streson = mkOp3 "streson"
+
+
+instance  CsStrget (S n)  where
+  strget = mkOp1 "strget"
+
+
+instance  CsStrindex (S n)  where
+  strindex = mkOp2 "strindex"
+
+
+instance  CsStrindexk (S n)  where
+  strindexk = mkOp2 "strindexk"
+
+
+instance  CsStrlen (S n)  where
+  strlen = mkOp1 "strlen"
+
+
+instance  CsStrlenk (S n)  where
+  strlenk = mkOp1 "strlenk"
+
+
+instance  CsStrlower (S n)  where
+  strlower = mkOp1 "strlower"
+
+
+instance  CsStrlowerk (S n)  where
+  strlowerk = mkOp1 "strlowerk"
+
+
+instance  CsStrrindex (S n)  where
+  strrindex = mkOp2 "strrindex"
+
+
+instance  CsStrrindexk (S n)  where
+  strrindexk = mkOp2 "strrindexk"
+
+
+instance  CsStrset (S n)  where
+  strset = mkOp2 "strset"
+
+
+instance  CsStrsub (S n)  where
+  strsub = mkOp1 "strsub"
+  strsub' = mkOp3 "strsub"
+
+
+instance  CsStrsubk (S n)  where
+  strsubk = mkOp3 "strsubk"
+
+
+instance  CsStrtod (S n)  where
+  strtod = mkOp1 "strtod"
+
+
+instance  CsStrtol (S n)  where
+  strtol = mkOp1 "strtol"
+
+
+instance  CsStrupper (S n)  where
+  strupper = mkOp1 "strupper"
+
+
+instance  CsStrupperk (S n)  where
+  strupperk = mkOp1 "strupperk"
+
+
+instance  CsStsend (S n)  where
+  stsend = mkOp3 "stsend"
+
+
+instance (Varable a, Varable b) => CsSub (S n) (ASig (S n)) a b where
+  sub = mkOp2 "sub"
+
+
+instance  CsSub (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  sub = mkOp2 "sub"
+
+
+instance  CsSub (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  sub = mkOp2 "sub"
+
+
+instance (Nat d) => CsSubinstr (S n) d where
+  subinstr = mkOp2 "subinstr"
+
+
+instance  CsSubinstrinit (S n)  where
+  subinstrinit = mkOp2 "subinstrinit"
+
+
+instance  CSE.CsSum (S n)  where
+  sum = mkOp1 "sum"
+
+
+instance  CsSvfilter (S n)  where
+  svfilter = mkOp3 "svfilter"
+  svfilter' = mkOp4 "svfilter"
+
+
+instance  CsSyncgrain (S n)  where
+  syncgrain = mkOp8 "syncgrain"
+
+
+instance  CsSyncloop (S n)  where
+  syncloop = mkOp10 "syncloop"
+  syncloop' = mkOp12 "syncloop"
+
+
+instance (Varable a) => CsSyncphasor (S n) a where
+  syncphasor = mkOp2 "syncphasor"
+  syncphasor' = mkOp3 "syncphasor"
+
+
+instance (KVar a) => CsSystem (S n) a where
+  system = mkOp2 "system"
+  system' = mkOp3 "system"
+
+
+instance  CsSystem_i (S n)  where
+  system_i = mkOp2 "system_i"
+  system_i' = mkOp3 "system_i"
+
+
+instance (PVar out, Varable a) => CsTab (S n) out a where
+  tab = mkOp2 "tab"
+  tab' = mkOp3 "tab"
+
+
+instance  CsTab_i (S n)  where
+  tab_i = mkOp2 "tab_i"
+  tab_i' = mkOp3 "tab_i"
+
+
+instance (Varable a) => CsTable (S n) (ASig (S n)) a where
+  table = mkOp2 "table"
+  table' = mkOp5 "table"
+
+
+instance (Varable a) => CsTable (S n) (KSig (S n)) a where
+  table = mkOp2 "table"
+  table' = mkOp5 "table"
+
+
+instance  CsTable (S n) (INum (S n)) (INum (S n)) where
+  table = mkOp2 "table"
+  table' = mkOp5 "table"
+
+
+instance (Varable a) => CsTable3 (S n) (ASig (S n)) a where
+  table3 = mkOp2 "table3"
+  table3' = mkOp5 "table3"
+
+
+instance (Varable a) => CsTable3 (S n) (KSig (S n)) a where
+  table3 = mkOp2 "table3"
+  table3' = mkOp5 "table3"
+
+
+instance  CsTable3 (S n) (INum (S n)) (INum (S n)) where
+  table3 = mkOp2 "table3"
+  table3' = mkOp5 "table3"
+
+
+instance  CsTablecopy (S n)  where
+  tablecopy = mkOp2 "tablecopy"
+
+
+instance  CsTablegpw (S n)  where
+  tablegpw = mkOp1 "tablegpw"
+
+
+instance (Varable a) => CsTablei (S n) (ASig (S n)) a where
+  tablei = mkOp2 "tablei"
+  tablei' = mkOp5 "tablei"
+
+
+instance (Varable a) => CsTablei (S n) (KSig (S n)) a where
+  tablei = mkOp2 "tablei"
+  tablei' = mkOp5 "tablei"
+
+
+instance  CsTablei (S n) (INum (S n)) (INum (S n)) where
+  tablei = mkOp2 "tablei"
+  tablei' = mkOp5 "tablei"
+
+
+instance  CsTableicopy (S n)  where
+  tableicopy = mkOp2 "tableicopy"
+
+
+instance  CsTableigpw (S n)  where
+  tableigpw = mkOp1 "tableigpw"
+
+
+instance (PVar out, Varable a) => CsTableikt (S n) out a where
+  tableikt = mkOp2 "tableikt"
+  tableikt' = mkOp5 "tableikt"
+
+
+instance  CsTableimix (S n)  where
+  tableimix = mkOp9 "tableimix"
+
+
+instance  CsTableiw (S n)  where
+  tableiw = mkOp3 "tableiw"
+  tableiw' = mkOp6 "tableiw"
+
+
+instance (PVar out, Varable a) => CsTablekt (S n) out a where
+  tablekt = mkOp2 "tablekt"
+  tablekt' = mkOp5 "tablekt"
+
+
+instance  CsTablemix (S n)  where
+  tablemix = mkOp9 "tablemix"
+
+
+instance  CsTableng (S n) (KSig (S n)) where
+  tableng = mkOp1 "tableng"
+
+
+instance  CsTableng (S n) (INum (S n)) where
+  tableng = mkOp1 "tableng"
+
+
+instance  CsTablera (S n)  where
+  tablera = mkOp3 "tablera"
+
+
+instance  CsTableseg (S n)  where
+  tableseg = mkOp4 "tableseg"
+
+
+instance (Varable a, Varable b) => CsTablew (S n) a b where
+  tablew = mkOp3 "tablew"
+  tablew' = mkOp6 "tablew"
+
+
+instance  CsTablewa (S n)  where
+  tablewa = mkOp3 "tablewa"
+
+
+instance (Varable a, Varable b) => CsTablewkt (S n) a b where
+  tablewkt = mkOp3 "tablewkt"
+  tablewkt' = mkOp6 "tablewkt"
+
+
+instance (Varable a) => CsTablexkt (S n) a where
+  tablexkt = mkOp4 "tablexkt"
+  tablexkt' = mkOp7 "tablexkt"
+
+
+instance  CsTablexseg (S n)  where
+  tablexseg = mkOp4 "tablexseg"
+
+
+instance  CsTabmorph (S n)  where
+  tabmorph = mkOp5 "tabmorph"
+
+
+instance  CsTabmorpha (S n)  where
+  tabmorpha = mkOp5 "tabmorpha"
+
+
+instance  CsTabmorphak (S n)  where
+  tabmorphak = mkOp5 "tabmorphak"
+
+
+instance  CsTabmorphi (S n)  where
+  tabmorphi = mkOp5 "tabmorphi"
+
+
+instance  CsTabplay (S n)  where
+  tabplay = mkOp4 "tabplay"
+
+
+instance  CsTabrec (S n)  where
+  tabrec = mkOp5 "tabrec"
+
+
+instance (KVar a, KVar b) => CsTabsum (S n) a b where
+  tabsum = mkOp1 "tabsum"
+  tabsum' = mkOp3 "tabsum"
+
+
+instance (Varable a, Varable b) => CsTabw (S n) a b where
+  tabw = mkOp3 "tabw"
+  tabw' = mkOp4 "tabw"
+
+
+instance  CsTabw_i (S n)  where
+  tabw_i = mkOp3 "tabw_i"
+  tabw_i' = mkOp4 "tabw_i"
+
+
+instance  CsTambourine (S n)  where
+  tambourine = mkOp2 "tambourine"
+  tambourine' = mkOp8 "tambourine"
+
+
+instance  CsTan (S n) (ASig (S n)) (ASig (S n)) where
+  tan = mkOp1 "tan"
+
+
+instance  CsTan (S n) (KSig (S n)) (KSig (S n)) where
+  tan = mkOp1 "tan"
+
+
+instance  CsTan (S n) (INum (S n)) (INum (S n)) where
+  tan = mkOp1 "tan"
+
+
+instance  CsTanh (S n) (ASig (S n)) (ASig (S n)) where
+  tanh = mkOp1 "tanh"
+
+
+instance  CsTanh (S n) (KSig (S n)) (KSig (S n)) where
+  tanh = mkOp1 "tanh"
+
+
+instance  CsTanh (S n) (INum (S n)) (INum (S n)) where
+  tanh = mkOp1 "tanh"
+
+
+instance  CsTaninv (S n) (ASig (S n)) (ASig (S n)) where
+  taninv = mkOp1 "taninv"
+
+
+instance  CsTaninv (S n) (KSig (S n)) (KSig (S n)) where
+  taninv = mkOp1 "taninv"
+
+
+instance  CsTaninv (S n) (INum (S n)) (INum (S n)) where
+  taninv = mkOp1 "taninv"
+
+
+instance  CsTaninv2 (S n) (ASig (S n)) (ASig (S n)) (ASig (S n)) where
+  taninv2 = mkOp2 "taninv2"
+
+
+instance  CsTaninv2 (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  taninv2 = mkOp2 "taninv2"
+
+
+instance  CsTaninv2 (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  taninv2 = mkOp2 "taninv2"
+
+
+instance  CsTb0 (S n) (KSig (S n)) where
+  tb0 = mkOp1 "tb0"
+
+
+instance  CsTb0 (S n) (INum (S n)) where
+  tb0 = mkOp1 "tb0"
+
+
+instance  CsTb0_init (S n)  where
+  tb0_init = mkOp1 "tb0_init"
+
+
+instance  CsTb1 (S n) (KSig (S n)) where
+  tb1 = mkOp1 "tb1"
+
+
+instance  CsTb1 (S n) (INum (S n)) where
+  tb1 = mkOp1 "tb1"
+
+
+instance  CsTb10 (S n) (KSig (S n)) where
+  tb10 = mkOp1 "tb10"
+
+
+instance  CsTb10 (S n) (INum (S n)) where
+  tb10 = mkOp1 "tb10"
+
+
+instance  CsTb10_init (S n)  where
+  tb10_init = mkOp1 "tb10_init"
+
+
+instance  CsTb11 (S n) (KSig (S n)) where
+  tb11 = mkOp1 "tb11"
+
+
+instance  CsTb11 (S n) (INum (S n)) where
+  tb11 = mkOp1 "tb11"
+
+
+instance  CsTb11_init (S n)  where
+  tb11_init = mkOp1 "tb11_init"
+
+
+instance  CsTb12 (S n) (KSig (S n)) where
+  tb12 = mkOp1 "tb12"
+
+
+instance  CsTb12 (S n) (INum (S n)) where
+  tb12 = mkOp1 "tb12"
+
+
+instance  CsTb12_init (S n)  where
+  tb12_init = mkOp1 "tb12_init"
+
+
+instance  CsTb13 (S n) (KSig (S n)) where
+  tb13 = mkOp1 "tb13"
+
+
+instance  CsTb13 (S n) (INum (S n)) where
+  tb13 = mkOp1 "tb13"
+
+
+instance  CsTb13_init (S n)  where
+  tb13_init = mkOp1 "tb13_init"
+
+
+instance  CsTb14 (S n) (KSig (S n)) where
+  tb14 = mkOp1 "tb14"
+
+
+instance  CsTb14 (S n) (INum (S n)) where
+  tb14 = mkOp1 "tb14"
+
+
+instance  CsTb14_init (S n)  where
+  tb14_init = mkOp1 "tb14_init"
+
+
+instance  CsTb15 (S n) (KSig (S n)) where
+  tb15 = mkOp1 "tb15"
+
+
+instance  CsTb15 (S n) (INum (S n)) where
+  tb15 = mkOp1 "tb15"
+
+
+instance  CsTb15_init (S n)  where
+  tb15_init = mkOp1 "tb15_init"
+
+
+instance  CsTb1_init (S n)  where
+  tb1_init = mkOp1 "tb1_init"
+
+
+instance  CsTb2 (S n) (KSig (S n)) where
+  tb2 = mkOp1 "tb2"
+
+
+instance  CsTb2 (S n) (INum (S n)) where
+  tb2 = mkOp1 "tb2"
+
+
+instance  CsTb2_init (S n)  where
+  tb2_init = mkOp1 "tb2_init"
+
+
+instance  CsTb3 (S n) (KSig (S n)) where
+  tb3 = mkOp1 "tb3"
+
+
+instance  CsTb3 (S n) (INum (S n)) where
+  tb3 = mkOp1 "tb3"
+
+
+instance  CsTb3_init (S n)  where
+  tb3_init = mkOp1 "tb3_init"
+
+
+instance  CsTb4 (S n) (KSig (S n)) where
+  tb4 = mkOp1 "tb4"
+
+
+instance  CsTb4 (S n) (INum (S n)) where
+  tb4 = mkOp1 "tb4"
+
+
+instance  CsTb4_init (S n)  where
+  tb4_init = mkOp1 "tb4_init"
+
+
+instance  CsTb5 (S n) (KSig (S n)) where
+  tb5 = mkOp1 "tb5"
+
+
+instance  CsTb5 (S n) (INum (S n)) where
+  tb5 = mkOp1 "tb5"
+
+
+instance  CsTb5_init (S n)  where
+  tb5_init = mkOp1 "tb5_init"
+
+
+instance  CsTb6 (S n) (KSig (S n)) where
+  tb6 = mkOp1 "tb6"
+
+
+instance  CsTb6 (S n) (INum (S n)) where
+  tb6 = mkOp1 "tb6"
+
+
+instance  CsTb6_init (S n)  where
+  tb6_init = mkOp1 "tb6_init"
+
+
+instance  CsTb7 (S n) (KSig (S n)) where
+  tb7 = mkOp1 "tb7"
+
+
+instance  CsTb7 (S n) (INum (S n)) where
+  tb7 = mkOp1 "tb7"
+
+
+instance  CsTb7_init (S n)  where
+  tb7_init = mkOp1 "tb7_init"
+
+
+instance  CsTb8 (S n) (KSig (S n)) where
+  tb8 = mkOp1 "tb8"
+
+
+instance  CsTb8 (S n) (INum (S n)) where
+  tb8 = mkOp1 "tb8"
+
+
+instance  CsTb8_init (S n)  where
+  tb8_init = mkOp1 "tb8_init"
+
+
+instance  CsTb9 (S n) (KSig (S n)) where
+  tb9 = mkOp1 "tb9"
+
+
+instance  CsTb9 (S n) (INum (S n)) where
+  tb9 = mkOp1 "tb9"
+
+
+instance  CsTb9_init (S n)  where
+  tb9_init = mkOp1 "tb9_init"
+
+
+instance (Varable a, Varable b) => CsTbvcf (S n) a b where
+  tbvcf = mkOp5 "tbvcf"
+  tbvcf' = mkOp6 "tbvcf"
+
+
+instance  CsTempest (S n)  where
+  tempest = mkOp10 "tempest"
+  tempest' = mkOp12 "tempest"
+
+
+instance  CsTempo (S n)  where
+  tempo = mkOp2 "tempo"
+
+
+instance  CsTempoval (S n)  where
+  tempoval = mkOp0 "tempoval"
+
+
+instance  CsTimedseq (S n)  where
+  timedseq = mkOp3 "timedseq"
+
+
+instance  CsTimeinstk (S n)  where
+  timeinstk = mkOp0 "timeinstk"
+
+
+instance  CsTimeinsts (S n)  where
+  timeinsts = mkOp0 "timeinsts"
+
+
+instance  CsTimek (S n) (KSig (S n)) where
+  timek = mkOp0 "timek"
+
+
+instance  CsTimek (S n) (INum (S n)) where
+  timek = mkOp0 "timek"
+
+
+instance  CsTimes (S n) (KSig (S n)) where
+  times = mkOp0 "times"
+
+
+instance  CsTimes (S n) (INum (S n)) where
+  times = mkOp0 "times"
+
+
+instance  CsTival (S n)  where
+  tival = mkOp0 "tival"
+
+
+instance  CsTlineto (S n)  where
+  tlineto = mkOp3 "tlineto"
+
+
+instance  CsTone (S n)  where
+  tone = mkOp2 "tone"
+  tone' = mkOp3 "tone"
+
+
+instance  CsTonek (S n)  where
+  tonek = mkOp2 "tonek"
+  tonek' = mkOp3 "tonek"
+
+
+instance  CsTonex (S n)  where
+  tonex = mkOp2 "tonex"
+  tonex' = mkOp4 "tonex"
+
+
+instance  CsTradsyn (S n)  where
+  tradsyn = mkOp5 "tradsyn"
+
+
+instance  CsTrandom (S n)  where
+  trandom = mkOp3 "trandom"
+
+
+instance (PVar out) => CsTranseg (S n) out where
+  transeg = mkOp4 "transeg"
+
+
+instance (PVar out) => CsTransegr (S n) out where
+  transegr = mkOp4 "transegr"
+
+
+instance  CsTrcross (S n)  where
+  trcross = mkOp4 "trcross"
+
+
+instance  CsTrfilter (S n)  where
+  trfilter = mkOp3 "trfilter"
+
+
+instance  CsTrigger (S n)  where
+  trigger = mkOp3 "trigger"
+
+
+instance  CsTrigseq (S n)  where
+  trigseq = mkOp6 "trigseq"
+
+
+instance  CsTrirand (S n) (ASig (S n)) where
+  trirand = mkOp1 "trirand"
+
+
+instance  CsTrirand (S n) (KSig (S n)) where
+  trirand = mkOp1 "trirand"
+
+
+instance  CsTrirand (S n) (INum (S n)) where
+  trirand = mkOp1 "trirand"
+
+
+instance  CsTrmix (S n)  where
+  trmix = mkOp2 "trmix"
+
+
+instance  CsTrscale (S n)  where
+  trscale = mkOp2 "trscale"
+
+
+instance  CsTrshift (S n)  where
+  trshift = mkOp2 "trshift"
+
+
+instance  CsTrsplit (S n)  where
+  trsplit = mkOp2 "trsplit"
+
+
+instance  CsTurnoff (S n)  where
+  turnoff = mkOp0 "turnoff"
+
+
+instance  CsTurnoff2 (S n)  where
+  turnoff2 = mkOp3 "turnoff2"
+
+
+instance  CsTurnon (S n)  where
+  turnon = mkOp1 "turnon"
+  turnon' = mkOp2 "turnon"
+
+
+instance  CsUnirand (S n) (ASig (S n)) where
+  unirand = mkOp1 "unirand"
+
+
+instance  CsUnirand (S n) (KSig (S n)) where
+  unirand = mkOp1 "unirand"
+
+
+instance  CsUnirand (S n) (INum (S n)) where
+  unirand = mkOp1 "unirand"
+
+
+instance  CsUpsamp (S n)  where
+  upsamp = mkOp1 "upsamp"
+
+
+instance  CsUrd (S n) (ASig (S n)) where
+  urd = mkOp1 "urd"
+
+
+instance  CsUrd (S n) (KSig (S n)) where
+  urd = mkOp1 "urd"
+
+
+instance  CsUrd (S n) (INum (S n)) where
+  urd = mkOp1 "urd"
+
+
+instance (KVar a, KVar b) => CsVadd (S n) a b where
+  vadd = mkOp3 "vadd"
+  vadd' = mkOp5 "vadd"
+
+
+instance  CsVadd_i (S n)  where
+  vadd_i = mkOp3 "vadd_i"
+  vadd_i' = mkOp4 "vadd_i"
+
+
+instance (KVar a, KVar b, KVar c) => CsVaddv (S n) a b c where
+  vaddv = mkOp3 "vaddv"
+  vaddv' = mkOp6 "vaddv"
+
+
+instance  CsVaddv_i (S n)  where
+  vaddv_i = mkOp3 "vaddv_i"
+  vaddv_i' = mkOp5 "vaddv_i"
+
+
+instance  CsVaget (S n)  where
+  vaget = mkOp2 "vaget"
+
+
+instance (Varable a) => CsValpass (S n) a where
+  valpass = mkOp4 "valpass"
+  valpass' = mkOp6 "valpass"
+
+
+instance  CsVaset (S n)  where
+  vaset = mkOp3 "vaset"
+
+
+instance (KVar a, KVar b) => CsVbap4 (S n) a b where
+  vbap4 = mkOp2 "vbap4"
+  vbap4' = mkOp4 "vbap4"
+
+
+instance  CsVbap4move (S n)  where
+  vbap4move = mkOp5 "vbap4move"
+
+
+instance  CsVbaplsinit (S n)  where
+  vbaplsinit = mkOp2 "vbaplsinit"
+  vbaplsinit' = mkOp34 "vbaplsinit"
+
+
+instance (KVar a, KVar b) => CsVbapz (S n) a b where
+  vbapz = mkOp4 "vbapz"
+  vbapz' = mkOp6 "vbapz"
+
+
+instance  CsVbapzmove (S n)  where
+  vbapzmove = mkOp7 "vbapzmove"
+
+
+instance  CsVcella (S n)  where
+  vcella = mkOp7 "vcella"
+  vcella' = mkOp8 "vcella"
+
+
+instance (Varable a) => CsVco2 (S n) a where
+  vco2 = mkOp2 "vco2"
+  vco2' = mkOp4 "vco2"
+
+
+instance  CsVco2ft (S n)  where
+  vco2ft = mkOp1 "vco2ft"
+  vco2ft' = mkOp3 "vco2ft"
+
+
+instance  CsVco2ift (S n)  where
+  vco2ift = mkOp1 "vco2ift"
+  vco2ift' = mkOp3 "vco2ift"
+
+
+instance  CsVco2init (S n)  where
+  vco2init = mkOp1 "vco2init"
+  vco2init' = mkOp6 "vco2init"
+
+
+instance (Varable a) => CsVcomb (S n) a where
+  vcomb = mkOp4 "vcomb"
+  vcomb' = mkOp6 "vcomb"
+
+
+instance (KVar a, KVar b, KVar c) => CsVcopy (S n) a b c where
+  vcopy = mkOp3 "vcopy"
+  vcopy' = mkOp6 "vcopy"
+
+
+instance  CsVcopy_i (S n)  where
+  vcopy_i = mkOp3 "vcopy_i"
+  vcopy_i' = mkOp5 "vcopy_i"
+
+
+instance  CsVdel_k (S n)  where
+  vdel_k = mkOp3 "vdel_k"
+  vdel_k' = mkOp4 "vdel_k"
+
+
+instance  CsVdelayk (S n)  where
+  vdelayk = mkOp3 "vdelayk"
+  vdelayk' = mkOp5 "vdelayk"
+
+
+instance  CsVdelayx (S n)  where
+  vdelayx = mkOp4 "vdelayx"
+  vdelayx' = mkOp5 "vdelayx"
+
+
+instance  CsVdelayxq (S n)  where
+  vdelayxq = mkOp7 "vdelayxq"
+  vdelayxq' = mkOp8 "vdelayxq"
+
+
+instance  CsVdelayxs (S n)  where
+  vdelayxs = mkOp5 "vdelayxs"
+  vdelayxs' = mkOp6 "vdelayxs"
+
+
+instance  CsVdelayxw (S n)  where
+  vdelayxw = mkOp4 "vdelayxw"
+  vdelayxw' = mkOp5 "vdelayxw"
+
+
+instance  CsVdelayxwq (S n)  where
+  vdelayxwq = mkOp7 "vdelayxwq"
+  vdelayxwq' = mkOp8 "vdelayxwq"
+
+
+instance  CsVdelayxws (S n)  where
+  vdelayxws = mkOp5 "vdelayxws"
+  vdelayxws' = mkOp6 "vdelayxws"
+
+
+instance (KVar a, KVar b, KVar c) => CsVdivv (S n) a b c where
+  vdivv = mkOp3 "vdivv"
+  vdivv' = mkOp6 "vdivv"
+
+
+instance  CsVdivv_i (S n)  where
+  vdivv_i = mkOp3 "vdivv_i"
+  vdivv_i' = mkOp5 "vdivv_i"
+
+
+instance  CsVecdelay (S n)  where
+  vecdelay = mkOp5 "vecdelay"
+  vecdelay' = mkOp6 "vecdelay"
+
+
+instance  CsVeloc (S n)  where
+  veloc = mkOp0 "veloc"
+  veloc' = mkOp2 "veloc"
+
+
+instance (KVar a, KVar b) => CsVexp (S n) a b where
+  vexp = mkOp3 "vexp"
+  vexp' = mkOp5 "vexp"
+
+
+instance  CsVexp_i (S n)  where
+  vexp_i = mkOp3 "vexp_i"
+  vexp_i' = mkOp4 "vexp_i"
+
+
+instance  CsVexpseg (S n)  where
+  vexpseg = mkOp4 "vexpseg"
+
+
+instance (KVar a, KVar b, KVar c) => CsVexpv (S n) a b c where
+  vexpv = mkOp3 "vexpv"
+  vexpv' = mkOp6 "vexpv"
+
+
+instance  CsVexpv_i (S n)  where
+  vexpv_i = mkOp3 "vexpv_i"
+  vexpv_i' = mkOp5 "vexpv_i"
+
+
+instance  CsVibes (S n)  where
+  vibes = mkOp9 "vibes"
+
+
+instance  CsVibr (S n)  where
+  vibr = mkOp3 "vibr"
+
+
+instance  CsVibrato (S n)  where
+  vibrato = mkOp9 "vibrato"
+  vibrato' = mkOp10 "vibrato"
+
+
+instance  CsVincr (S n)  where
+  vincr = mkOp2 "vincr"
+
+
+instance  CsVlimit (S n)  where
+  vlimit = mkOp4 "vlimit"
+
+
+instance  CsVlinseg (S n)  where
+  vlinseg = mkOp4 "vlinseg"
+
+
+instance  CsVlowres (S n)  where
+  vlowres = mkOp5 "vlowres"
+
+
+instance  CsVmap (S n)  where
+  vmap = mkOp3 "vmap"
+  vmap' = mkOp5 "vmap"
+
+
+instance  CsVmirror (S n)  where
+  vmirror = mkOp4 "vmirror"
+
+
+instance (KVar a, KVar b) => CsVmult (S n) a b where
+  vmult = mkOp3 "vmult"
+  vmult' = mkOp5 "vmult"
+
+
+instance  CsVmult_i (S n)  where
+  vmult_i = mkOp3 "vmult_i"
+  vmult_i' = mkOp4 "vmult_i"
+
+
+instance (KVar a, KVar b, KVar c) => CsVmultv (S n) a b c where
+  vmultv = mkOp3 "vmultv"
+  vmultv' = mkOp6 "vmultv"
+
+
+instance  CsVmultv_i (S n)  where
+  vmultv_i = mkOp3 "vmultv_i"
+  vmultv_i' = mkOp5 "vmultv_i"
+
+
+instance  CsVoice (S n)  where
+  voice = mkOp8 "voice"
+
+
+instance  CsVosim (S n)  where
+  vosim = mkOp7 "vosim"
+  vosim' = mkOp8 "vosim"
+
+
+instance  CsVphaseseg (S n)  where
+  vphaseseg = mkOp4 "vphaseseg"
+
+
+instance  CsVport (S n)  where
+  vport = mkOp3 "vport"
+  vport' = mkOp4 "vport"
+
+
+instance (KVar a, KVar b) => CsVpow (S n) a b where
+  vpow = mkOp3 "vpow"
+  vpow' = mkOp5 "vpow"
+
+
+instance  CsVpow_i (S n)  where
+  vpow_i = mkOp3 "vpow_i"
+  vpow_i' = mkOp4 "vpow_i"
+
+
+instance (KVar a, KVar b, KVar c) => CsVpowv (S n) a b c where
+  vpowv = mkOp3 "vpowv"
+  vpowv' = mkOp6 "vpowv"
+
+
+instance  CsVpowv_i (S n)  where
+  vpowv_i = mkOp3 "vpowv_i"
+  vpowv_i' = mkOp5 "vpowv_i"
+
+
+instance  CsVpvoc (S n)  where
+  vpvoc = mkOp3 "vpvoc"
+  vpvoc' = mkOp5 "vpvoc"
+
+
+instance  CsVrandh (S n)  where
+  vrandh = mkOp4 "vrandh"
+  vrandh' = mkOp8 "vrandh"
+
+
+instance  CsVrandi (S n)  where
+  vrandi = mkOp4 "vrandi"
+  vrandi' = mkOp8 "vrandi"
+
+
+instance (KVar a, KVar b, KVar c) => CsVsubv (S n) a b c where
+  vsubv = mkOp3 "vsubv"
+  vsubv' = mkOp6 "vsubv"
+
+
+instance  CsVsubv_i (S n)  where
+  vsubv_i = mkOp3 "vsubv_i"
+  vsubv_i' = mkOp5 "vsubv_i"
+
+
+instance  CsVtaba (S n)  where
+  vtaba = mkOp3 "vtaba"
+
+
+instance  CsVtabi (S n)  where
+  vtabi = mkOp3 "vtabi"
+
+
+instance  CsVtabk (S n)  where
+  vtabk = mkOp3 "vtabk"
+
+
+instance  CsVtable1k (S n)  where
+  vtable1k = mkOp2 "vtable1k"
+
+
+instance  CsVtablea (S n)  where
+  vtablea = mkOp5 "vtablea"
+
+
+instance  CsVtablei (S n)  where
+  vtablei = mkOp5 "vtablei"
+
+
+instance  CsVtablek (S n)  where
+  vtablek = mkOp5 "vtablek"
+
+
+instance  CsVtablewa (S n)  where
+  vtablewa = mkOp4 "vtablewa"
+
+
+instance  CsVtablewi (S n)  where
+  vtablewi = mkOp4 "vtablewi"
+
+
+instance  CsVtablewk (S n)  where
+  vtablewk = mkOp4 "vtablewk"
+
+
+instance  CsVtabwa (S n)  where
+  vtabwa = mkOp3 "vtabwa"
+
+
+instance  CsVtabwi (S n)  where
+  vtabwi = mkOp3 "vtabwi"
+
+
+instance  CsVtabwk (S n)  where
+  vtabwk = mkOp3 "vtabwk"
+
+
+instance  CsVwrap (S n)  where
+  vwrap = mkOp4 "vwrap"
+
+
+instance  CsWaveset (S n)  where
+  waveset = mkOp2 "waveset"
+  waveset' = mkOp3 "waveset"
+
+
+instance  CsWeibull (S n) (ASig (S n)) where
+  weibull = mkOp2 "weibull"
+
+
+instance  CsWeibull (S n) (KSig (S n)) where
+  weibull = mkOp2 "weibull"
+
+
+instance  CsWeibull (S n) (INum (S n)) where
+  weibull = mkOp2 "weibull"
+
+
+instance  CsWgbow (S n)  where
+  wgbow = mkOp7 "wgbow"
+  wgbow' = mkOp8 "wgbow"
+
+
+instance  CsWgbowedbar (S n)  where
+  wgbowedbar = mkOp5 "wgbowedbar"
+  wgbowedbar' = mkOp9 "wgbowedbar"
+
+
+instance  CsWgbrass (S n)  where
+  wgbrass = mkOp7 "wgbrass"
+  wgbrass' = mkOp8 "wgbrass"
+
+
+instance  CsWgclar (S n)  where
+  wgclar = mkOp9 "wgclar"
+  wgclar' = mkOp10 "wgclar"
+
+
+instance  CsWgflute (S n)  where
+  wgflute = mkOp9 "wgflute"
+  wgflute' = mkOp12 "wgflute"
+
+
+instance  CsWgpluck (S n)  where
+  wgpluck = mkOp7 "wgpluck"
+
+
+instance  CsWgpluck2 (S n)  where
+  wgpluck2 = mkOp5 "wgpluck2"
+
+
+instance (Varable a) => CsWguide1 (S n) a where
+  wguide1 = mkOp4 "wguide1"
+
+
+instance (Varable a, Varable b) => CsWguide2 (S n) a b where
+  wguide2 = mkOp7 "wguide2"
+
+
+instance  CsWrap (S n) (ASig (S n)) (ASig (S n)) where
+  wrap = mkOp3 "wrap"
+
+
+instance  CsWrap (S n) (KSig (S n)) (KSig (S n)) where
+  wrap = mkOp3 "wrap"
+
+
+instance  CsWrap (S n) (INum (S n)) (INum (S n)) where
+  wrap = mkOp3 "wrap"
+
+
+instance  CsWterrain (S n)  where
+  wterrain = mkOp8 "wterrain"
+
+
+instance (PVar out) => CsXadsr (S n) out where
+  xadsr = mkOp4 "xadsr"
+  xadsr' = mkOp5 "xadsr"
+
+
+instance (Varable a, Varable b) => CsXor (S n) (ASig (S n)) a b where
+  xor = mkOp2 "xor"
+
+
+instance  CsXor (S n) (KSig (S n)) (KSig (S n)) (KSig (S n)) where
+  xor = mkOp2 "xor"
+
+
+instance  CsXor (S n) (INum (S n)) (INum (S n)) (INum (S n)) where
+  xor = mkOp2 "xor"
+
+
+instance  CsXout (S n)  where
+  xout = mkOp1 "xout"
+
+
+instance  CsXscanmap (S n)  where
+  xscanmap = mkOp3 "xscanmap"
+  xscanmap' = mkOp4 "xscanmap"
+
+
+instance  CsXscans (S n)  where
+  xscans = mkOp4 "xscans"
+  xscans' = mkOp5 "xscans"
+
+
+instance  CsXscansmap (S n)  where
+  xscansmap = mkOp5 "xscansmap"
+  xscansmap' = mkOp6 "xscansmap"
+
+
+instance  CsXscanu (S n)  where
+  xscanu = mkOp18 "xscanu"
+
+
+instance  CsXtratim (S n)  where
+  xtratim = mkOp1 "xtratim"
+
+
+instance  CsXyin (S n)  where
+  xyin = mkOp5 "xyin"
+  xyin' = mkOp7 "xyin"
+
+
+instance  CsZacl (S n)  where
+  zacl = mkOp2 "zacl"
+
+
+instance  CsZakinit (S n)  where
+  zakinit = mkOp2 "zakinit"
+
+
+instance  CsZamod (S n)  where
+  zamod = mkOp2 "zamod"
+
+
+instance  CsZar (S n)  where
+  zar = mkOp1 "zar"
+
+
+instance  CsZarg (S n)  where
+  zarg = mkOp2 "zarg"
+
+
+instance  CsZaw (S n)  where
+  zaw = mkOp2 "zaw"
+
+
+instance  CsZawm (S n)  where
+  zawm = mkOp2 "zawm"
+  zawm' = mkOp3 "zawm"
+
+
+instance  CsZfilter2 (S n)  where
+  zfilter2 = mkOp6 "zfilter2"
+
+
+instance  CsZir (S n)  where
+  zir = mkOp1 "zir"
+
+
+instance  CsZiw (S n)  where
+  ziw = mkOp2 "ziw"
+
+
+instance  CsZiwm (S n)  where
+  ziwm = mkOp2 "ziwm"
+  ziwm' = mkOp3 "ziwm"
+
+
+instance  CsZkcl (S n)  where
+  zkcl = mkOp2 "zkcl"
+
+
+instance  CsZkmod (S n)  where
+  zkmod = mkOp2 "zkmod"
+
+
+instance  CsZkr (S n)  where
+  zkr = mkOp1 "zkr"
+
+
+instance  CsZkw (S n)  where
+  zkw = mkOp2 "zkw"
+
+
+instance  CsZkwm (S n)  where
+  zkwm = mkOp2 "zkwm"
+  zkwm' = mkOp3 "zkwm"
diff --git a/src/Language/XDsp/Implementations/HaskellNative.hs b/src/Language/XDsp/Implementations/HaskellNative.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Implementations/HaskellNative.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE
+     NoMonomorphismRestriction
+    ,TypeFamilies
+    ,DeriveFunctor
+    ,DeriveDataTypeable
+    ,GeneralizedNewtypeDeriving
+    ,MultiParamTypeClasses
+    ,FlexibleInstances
+    ,OverlappingInstances #-}
+
+module Language.XDsp.Implementations.HaskellNative
+
+where
+
+import           Language.XDsp.Semantics
+
+import           Control.Applicative
+import           Control.Monad.Reader
+import           Data.Data
+import           Data.Array.Unboxed
+
+-- Basic audio evaluator
+
+type RType = (Integer, Integer) -- SR, ksmps
+
+defaultRType :: RType
+defaultRType = (44100,16)
+
+newtype HN a = HN { unHn :: Reader RType a }
+  deriving (Functor, Applicative, Monad, Typeable)
+
+evalHn :: HN a -> RType -> a
+evalHn = runReader . unHn
+
+instance MonadReader HN where
+  type EnvType HN = RType
+  ask = HN ask
+  local f = HN . local f . unHn
+
+instance Dsp HN where
+  data (ASig HN) = HN_A (ZipList Double)
+  data (KSig HN) = HN_K (ZipList Double)
+  data (INum HN) = HN_I Double
+  getSr    = fst <$> ask
+  getKsmps = snd <$> ask
+
+instance Constants HN where
+  csig = return . HN_A . pure
+  ckig = return . HN_K . pure
+  cnst = return . HN_I
+
+instance Show (ASig HN) where
+  show _ = "audio signal"
+
+instance Eq (ASig HN) where
+  (HN_A z1) /= (HN_A z2) = getZipList z1 /= getZipList z2
+
+instance Num (ASig HN) where
+  (HN_A z1) + (HN_A z2) = HN_A $ (+) <$> z1 <*> z2
+  (HN_A z1) * (HN_A z2) = HN_A $ (*) <$> z1 <*> z2
+  abs    (HN_A z)       = HN_A $ abs <$> z
+  signum (HN_A z)       = HN_A $ signum <$> z
+  fromInteger           = HN_A . pure . fromInteger
+
+instance Fractional (ASig HN) where
+  (HN_A z1) / (HN_A z2) = HN_A $ (/) <$> z1 <*> z2
+  fromRational = HN_A . pure . fromRational
+
+instance Show (KSig HN) where
+  show _ = "control signal"
+
+instance Eq (KSig HN) where
+  (HN_K z1) /= (HN_K z2) = getZipList z1 /= getZipList z2
+
+instance Num (KSig HN) where
+  (HN_K z1) + (HN_K z2) = HN_K $ (+) <$> z1 <*> z2
+  (HN_K z1) * (HN_K z2) = HN_K $ (*) <$> z1 <*> z2
+  abs    (HN_K z)       = HN_K $ abs <$> z
+  signum (HN_K z)       = HN_K $ signum <$> z
+  fromInteger           = HN_K . pure . fromInteger
+
+instance Fractional (KSig HN) where
+  (HN_K z1) / (HN_K z2) = HN_K $ (/) <$> z1 <*> z2
+  fromRational = HN_K . pure . fromRational
+
+instance Show (INum HN) where
+  show _ = "control signal"
+
+instance Eq (INum HN) where
+  (HN_I z1) /= (HN_I z2) = z1 /= z2
+  (HN_I z1) == (HN_I z2) = z1 == z2
+
+instance Num (INum HN) where
+  (HN_I z1) + (HN_I z2) = HN_I $ z1 + z2
+  (HN_I z1) * (HN_I z2) = HN_I $ z1 * z2
+  abs    (HN_I z)       = HN_I $ abs z
+  signum (HN_I z)       = HN_I $ signum z
+  fromInteger           = HN_I . fromInteger
+
+instance Fractional (INum HN) where
+  (HN_I z1) / (HN_I z2) = HN_I $ z1 / z2
+  fromRational = HN_I . fromRational
+
+instance Show s => Show (HN s) where
+  show s = show $ evalHn s defaultRType
+
+instance Eq s => Eq (HN s) where
+  e1 == e2 = evalHn (liftM2 (==) e1 e2) defaultRType
+
+instance Num e => Num (HN e) where
+  (+)         = liftM2 (+)
+  (*)         = liftM2 (*)
+  abs         = fmap abs
+  signum      = fmap signum
+  fromInteger = pure . fromInteger
+
+instance Fractional e => Fractional (HN e) where
+  (/)          = liftM2 (/)
+  recip        = fmap recip
+  fromRational = pure . fromRational
+
+-- ---------------------------------
+-- ---------------------------------
+-- basic language extensions
+
+-- ---------------------------------
+-- ---------------------------------
+-- Buffers (function tables)
+
+instance Buffer HN where
+  type Buf HN = UArray Int Double
+  emptyBuffer sz = return . listArray (0,sz-1) $ replicate sz 0
+
+instance (Integral a) => BufferR HN Double a where
+  lookupAt buf i = return $ buf ! (fromIntegral i)
+
+lookupInterp :: UArray Int Double -> Double -> Double
+lookupInterp arr d1 = v1 + frc * (v2-v1)
+ where
+  i  = floor d1
+  v1 = arr ! i
+  v2 = arr ! i+1
+  frc = d1 - (fromIntegral i)
+
+-- | table lookup with linear interpolation
+instance BufferR HN Double Double where
+  lookupAt buf ix = return $ lookupInterp buf ix
+
+instance BufferR HN Double (INum HN) where
+  lookupAt buf (HN_I ix) = lookupAt buf ix
+
+instance BufferR HN (ASig HN) (ASig HN) where
+  lookupAt buf (HN_A ix) = return . HN_A $ fmap (lookupInterp buf) ix
+
+instance BufferR HN (KSig HN) (KSig HN) where
+  lookupAt buf (HN_K ix) = return . HN_K $ fmap (lookupInterp buf) ix
+
+-- ---------------------------------
+-- ---------------------------------
+-- phasor and oscillators
+
+phasor' :: Integer -> Double -> Double -> Double
+phasor' sr frq last = if next <= 1
+  then next
+  else next-(fromIntegral $ floor next)
+ where next = last + (frq/(fromIntegral sr))
+
+instance Phasor HN (KSig HN) (INum HN) where
+  phasor (HN_I frq') = f frq' <$> getSr
+   where f frq sr = let phsfn = phasor' sr frq
+                        phs n = n : phs (phsfn n)
+                    in HN_K . ZipList $ phs 0
+
+instance Phasor HN (KSig HN) (KSig HN) where
+  phasor (HN_K frq') = f frq' <$> getSr
+   where f zk sr =
+          let phs = ZipList $ 0 : getZipList ((phasor' sr) <$> zk <*> phs)
+          in  HN_K phs
+
+instance Phasor HN (ASig HN) (INum HN) where
+  phasor (HN_I frq') = f frq' <$> getSr
+   where f frq sr = let phsfn = phasor' sr frq
+                        phs n = n : phs (phsfn n)
+                    in HN_A . ZipList $ phs 0
+
+instance Phasor HN (ASig HN) (ASig HN) where
+  phasor (HN_A frq') = f frq' <$> getSr
+   where f zk sr =
+          let phs = ZipList $ 0 : getZipList ((phasor' sr) <$> zk <*> phs)
+          in  HN_A phs
+
+instance Phasor HN (ASig HN) (KSig HN) where
+  phasor (HN_K (ZipList frq')) = f frq' <$> getSr <*> getKsmps
+   where f k sr ksmps =
+          let phs = replicate (fromIntegral ksmps) 0
+                    : zipWith (\frq -> map (phasor' sr frq)) k phs
+          in HN_A . ZipList $ concat phs
diff --git a/src/Language/XDsp/Semantics.hs b/src/Language/XDsp/Semantics.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics.hs
@@ -0,0 +1,11 @@
+module Language.XDsp.Semantics (
+  module Language.XDsp.Semantics.Core
+  ,module Language.XDsp.Semantics.BasicExtensions
+  ,module Language.XDsp.Semantics.Extras
+)
+
+where
+
+import Language.XDsp.Semantics.Core
+import Language.XDsp.Semantics.BasicExtensions
+import Language.XDsp.Semantics.Extras
diff --git a/src/Language/XDsp/Semantics/BasicExtensions.hs b/src/Language/XDsp/Semantics/BasicExtensions.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/BasicExtensions.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE TypeFamilies
+            ,MultiParamTypeClasses
+            ,FlexibleContexts
+            ,DeriveFunctor #-}
+
+module Language.XDsp.Semantics.BasicExtensions (
+  StringVar (..)
+ ,Buffer (..)
+ ,BufferR (..)
+ ,VKtl (..)
+ ,VBuf (..)
+ ,LblBlock (..)
+ ,NumArgs (..)
+ ,TList (..)
+ ,unTList
+ ,unTList'
+ ,unsafeTList
+ ,defaultRunBlock
+ ,Phasor (..)
+ ,Oscil (..)
+)
+
+where
+
+import           Language.XDsp.Semantics.Core
+import           Data.TypeLevel.Num
+
+
+-- a few very common extensions.
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- some basic extensions
+
+-- | Support for string variables.
+class Dsp repr => StringVar repr where
+  data VString repr :: *
+
+-- | Audio buffer or other data table.
+class Dsp repr => Buffer repr where
+  type Buf repr :: *
+  emptyBuffer :: Int -> repr (Buf repr)
+
+-- | Table lookup
+class Buffer repr => BufferR repr out a where
+  lookupAt :: Buf repr -> a -> repr out
+
+-- | Creates a runnable labelled block.
+-- This block can only be run at compile time.  Creating runnable blocks at
+-- runtime is a to-be-implemented class.
+class Dsp repr => LblBlock repr where
+  type ArgTag repr :: * -- type-level number to tag the length of the arglist
+  type ArgTyp repr :: * -- argument type
+  data Block repr  :: *
+  lblBlock :: Int -> repr a -> repr (Block repr)
+  runBlock :: Block repr
+              -> Double
+              -> Double
+              -> TList (ArgTag repr) (ArgTyp repr)
+              -> repr ()
+
+-- | Gets an argument from a runnable context
+class (Nat n, Nat m, m :>=: n) => NumArgs repr m n where
+  getArg :: n -> repr m (INum (repr m))
+
+data TList n a = TList [a] deriving (Eq, Show, Functor)
+
+defaultRunBlock ::
+ (ArgTag repr ~ D3, LblBlock repr) =>
+  Block repr
+  -> Double
+  -> Double
+  -> repr ()
+defaultRunBlock blk st dr = runBlock blk st dr tlist0
+
+tlist0 :: TList D3 a
+tlist0 = TList []
+
+unTList :: TList n a -> [a]
+unTList (TList l) = l
+
+unTList' :: n -> TList n a -> [a]
+unTList' _ = unTList
+
+unsafeTList :: Nat n => n -> [a] -> TList n a
+unsafeTList _ l = TList l
+
+-- ---------------------------------
+-- ---------------------------------
+-- external input functions
+
+-- | Get data from an external source
+class Dsp repr => VKtl repr where
+  vktl :: String -> repr (KSig repr)
+
+-- | Create a sized buffer which is updated by an external source
+class Buffer repr => VBuf repr where
+  vbuf :: String -> Int -> repr (Buf repr)
+
+-- ---------------------------------
+-- ---------------------------------
+-- basic audio
+
+-- | Phasor (output sawtooth range 0-1 at specified frequency)
+class Phasor repr out a where
+  phasor :: a -> repr out
+
+-- | A basic table-lookup oscillator, interpolating and non-interpolating
+class Buffer repr => Oscil repr out a b where
+  oscil  :: a -> b -> Buf repr -> repr out
+  oscil' :: a -> b -> Buf repr -> INum repr -> repr out
+
+
diff --git a/src/Language/XDsp/Semantics/Core.hs b/src/Language/XDsp/Semantics/Core.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/Core.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
+
+module Language.XDsp.Semantics.Core
+
+where
+
+-- |Third version of tagless final csound interpreter
+-- no de Bruijn indices, a monadic repr
+
+class Dsp repr where
+  data ASig repr :: *
+  data KSig repr :: *
+  data INum repr :: *
+  getSr    :: repr Integer
+  getKsmps :: repr Integer
+
+-- |Create signals from constants.
+class Dsp repr => Constants repr where
+  cnst :: Double -> repr (INum repr)
+  ckig :: Double -> repr (KSig repr)
+  csig :: Double -> repr (ASig repr)
+
+-- ---------------------------------
+-- ---------------------------------
+-- Very common extensions.
+
+-- | Assign a signal to a named variable
+class Dsp repr => Asn repr a where
+  asn   :: a -> repr a
+
diff --git a/src/Language/XDsp/Semantics/CsoundExt.hs b/src/Language/XDsp/Semantics/CsoundExt.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/CsoundExt.hs
@@ -0,0 +1,31 @@
+module Language.XDsp.Semantics.CsoundExt (
+  CsoundClass (..)
+ ,Out (..)
+ ,module Language.XDsp.Semantics.CsoundExt.All
+)
+
+where
+
+import Language.XDsp.Semantics.Core
+import Language.XDsp.Semantics.BasicExtensions
+
+import Language.XDsp.Semantics.CsoundExt.Core
+import Language.XDsp.Semantics.CsoundExt.All
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- csound-specific language extensions.  Although these could be implemented
+-- in other backends, doing so may be un-idiomatic
+
+-- | Output classes
+class Out repr where
+  out  :: ASig repr -> repr ()
+  outs :: ASig repr -> ASig repr -> repr ()
+  outq :: ASig repr -> ASig repr
+          -> ASig repr -> ASig repr -> repr ()
+  outo :: ASig repr -> ASig repr
+          -> ASig repr -> ASig repr
+          -> ASig repr -> ASig repr
+          -> ASig repr -> ASig repr -> repr ()
+
diff --git a/src/Language/XDsp/Semantics/CsoundExt/All.hs b/src/Language/XDsp/Semantics/CsoundExt/All.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/CsoundExt/All.hs
@@ -0,0 +1,9938 @@
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts #-}
+
+module Language.XDsp.Semantics.CsoundExt.All where
+
+import Language.XDsp.Semantics.Core
+import Language.XDsp.Semantics.CsoundExt.Core
+import Language.XDsp.Semantics.Extras
+import Language.XDsp.Semantics.BasicExtensions
+
+class (CsoundClass repr) => CsATSadd repr  where
+  aTSadd ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  aTSadd' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsATSaddnz repr  where
+  aTSaddnz ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (ASig repr)
+  aTSaddnz' :: KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsATSbufread repr  where
+  aTSbufread ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+  aTSbufread' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsATScross repr  where
+  aTScross ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  aTScross' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsATSinfo repr  where
+  aTSinfo ::
+    VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsATSinterpread repr  where
+  aTSinterpread ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsATSpartialtap repr  where
+  aTSpartialtap ::
+    INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsATSread repr  where
+  aTSread ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsATSreadnz repr  where
+  aTSreadnz ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsATSsinnoi repr  where
+  aTSsinnoi ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (ASig repr)
+  aTSsinnoi' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMixerClear repr  where
+  mixerClear ::
+    repr ()
+
+
+class (CsoundClass repr) => CsMixerGetLevel repr  where
+  mixerGetLevel ::
+    INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMixerReceive repr  where
+  mixerReceive ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMixerSend repr  where
+  mixerSend ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMixerSetLevel repr  where
+  mixerSetLevel ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMixerSetLevel_i repr  where
+  mixerSetLevel_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsACS repr  where
+  aCS ::
+    KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAbs repr out a where
+  abs ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsAdd repr out a b where
+  add ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsAdsr repr out  where
+  adsr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  adsr' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsAdsyn repr  where
+  adsyn ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> repr (ASig repr)
+  adsyn' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAdsynt repr  where
+  adsynt ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  adsynt' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAdsynt2 repr  where
+  adsynt2 ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  adsynt2' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAftouch repr  where
+  aftouch ::
+    repr (KSig repr)
+  aftouch' :: INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsAlpass repr  where
+  alpass ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  alpass' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAlwayson repr  where
+  alwayson ::
+    VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsAmpdb repr out a where
+  ampdb ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsAmpdbfs repr out a where
+  ampdbfs ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsAmpmidi repr  where
+  ampmidi ::
+    INum repr
+    -> repr (INum repr)
+  ampmidi' :: INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsAmpmidid repr out  where
+  ampmidid ::
+    KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsAnd repr out a b where
+  and ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsAreson repr  where
+  areson ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  areson' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAresonk repr  where
+  aresonk ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  aresonk' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsAtone repr  where
+  atone ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  atone' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsAtonek repr  where
+  atonek ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  atonek' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsAtonex repr  where
+  atonex ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  atonex' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBabo repr  where
+  babo ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  babo' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsBalance repr  where
+  balance ::
+    ASig repr
+    -> ASig repr
+    -> repr (ASig repr)
+  balance' :: ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBamboo repr  where
+  bamboo ::
+    KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  bamboo' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBarmodel repr  where
+  barmodel ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBbcutm repr  where
+  bbcutm ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  bbcutm' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBbcuts repr  where
+  bbcuts ::
+    ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  bbcuts' :: ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsBetarand repr out  where
+  betarand ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsBexprnd repr out  where
+  bexprnd ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsBformdec repr d  where
+  bformdec ::
+    INum repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> [ASig repr]
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsBformdec1 repr d  where
+  bformdec1 ::
+    INum repr
+    -> [ASig repr]
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsBformenc1 repr d  where
+  bformenc1 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsBinit repr  where
+  binit ::
+    FSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsBiquad repr  where
+  biquad ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  biquad' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBiquada repr  where
+  biquada ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> repr (ASig repr)
+  biquada' :: ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsBirnd repr out  where
+  birnd ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsBqrez repr a b where
+  bqrez ::
+    ASig repr
+    -> a
+    -> b
+    -> repr (ASig repr)
+  bqrez' :: ASig repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButbp repr  where
+  butbp ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butbp' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButbr repr  where
+  butbr ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butbr' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButhp repr  where
+  buthp ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  buthp' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButlp repr  where
+  butlp ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butlp' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButterbp repr  where
+  butterbp ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butterbp' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButterbr repr  where
+  butterbr ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butterbr' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButterhp repr  where
+  butterhp ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butterhp' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButterlp repr  where
+  butterlp ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  butterlp' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsButton repr  where
+  button ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsBuzz repr a b where
+  buzz ::
+    a
+    -> b
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  buzz' :: a
+    -> b
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCabasa repr  where
+  cabasa ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  cabasa' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCauchy repr out  where
+  cauchy ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCeil repr out a where
+  ceil ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsCent repr out a where
+  cent ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsChanctrl repr out  where
+  chanctrl ::
+    INum repr
+    -> INum repr
+    -> repr out
+  chanctrl' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsChanged repr  where
+  changed ::
+    [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsChani repr out  where
+  chani ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsChano repr a where
+  chano ::
+    a
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChebyshevpoly repr  where
+  chebyshevpoly ::
+    ASig repr
+    -> [KSig repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCheckbox repr  where
+  checkbox ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsChn_S repr  where
+  chn_S ::
+    VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChn_a repr  where
+  chn_a ::
+    VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChn_k repr  where
+  chn_k ::
+    VString repr
+    -> INum repr
+    -> repr ()
+  chn_k' :: VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChnclear repr  where
+  chnclear ::
+    VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChnexport repr out  where
+  chnexport ::
+    VString repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsChnget repr out  where
+  chnget ::
+    VString repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsChnmix repr  where
+  chnmix ::
+    ASig repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChnrecv repr  where
+  chnrecv ::
+    VString repr
+    -> repr ()
+  chnrecv' :: VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChnsend repr  where
+  chnsend ::
+    VString repr
+    -> repr ()
+  chnsend' :: VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsChnset repr a where
+  chnset ::
+    a
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsClear repr  where
+  clear ::
+    [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsClfilt repr  where
+  clfilt ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  clfilt' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsClip repr  where
+  clip ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  clip' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsClockoff repr  where
+  clockoff ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsClockon repr  where
+  clockon ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsComb repr  where
+  comb ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  comb' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCompress repr  where
+  compress ::
+    ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsConnect repr  where
+  connect ::
+    VString repr
+    -> VString repr
+    -> VString repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsControl repr  where
+  control ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsConvle repr d  where
+  convle ::
+    ASig repr
+    -> VString repr
+    -> repr (TList d (ASig repr))
+  convle' :: ASig repr
+    -> VString repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsConvolve repr d  where
+  convolve ::
+    ASig repr
+    -> VString repr
+    -> repr (TList d (ASig repr))
+  convolve' :: ASig repr
+    -> VString repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsCos repr out a where
+  cos ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsCosh repr out a where
+  cosh ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsCosinv repr out a where
+  cosinv ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsCps2pch repr  where
+  cps2pch ::
+    INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsCpsmidi repr  where
+  cpsmidi ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsCpsmidib repr out  where
+  cpsmidib ::
+    repr out
+  cpsmidib' :: INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCpsmidinn repr out  where
+  cpsmidinn ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCpsoct repr out a where
+  cpsoct ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsCpspch repr out  where
+  cpspch ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCpstmid repr  where
+  cpstmid ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsCpstun repr  where
+  cpstun ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsCpstuni repr  where
+  cpstuni ::
+    INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsCpsxpch repr  where
+  cpsxpch ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsCpuprc repr  where
+  cpuprc ::
+    VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsCross2 repr  where
+  cross2 ::
+    ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCrossfm repr a b c d where
+  crossfm ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crossfm' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrossfmi repr a b c d where
+  crossfmi ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crossfmi' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrossfmpm repr a b c d where
+  crossfmpm ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crossfmpm' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrossfmpmi repr a b c d where
+  crossfmpmi ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crossfmpmi' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrosspm repr a b c d where
+  crosspm ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crosspm' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrosspmi repr a b c d where
+  crosspmi ::
+    a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  crosspmi' :: a
+    -> b
+    -> c
+    -> d
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsCrunch repr  where
+  crunch ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  crunch' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsCtlchn repr  where
+  ctlchn ::
+    repr (KSig repr, KSig repr, KSig repr)
+  ctlchn' :: INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsCtrl14 repr out  where
+  ctrl14 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  ctrl14' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCtrl21 repr out  where
+  ctrl21 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  ctrl21' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCtrl7 repr out  where
+  ctrl7 ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  ctrl7' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsCtrlinit repr  where
+  ctrlinit ::
+    INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsCuserrnd repr out  where
+  cuserrnd ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsDam repr  where
+  dam ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDate repr  where
+  date ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsDates repr  where
+  dates ::
+    repr (VString repr)
+  dates' :: INum repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsDb repr out a where
+  db ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsDbamp repr out  where
+  dbamp ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsDbfsamp repr out  where
+  dbfsamp ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsDcblock repr  where
+  dcblock ::
+    ASig repr
+    -> repr (ASig repr)
+  dcblock' :: ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDcblock2 repr  where
+  dcblock2 ::
+    ASig repr
+    -> repr (ASig repr)
+  dcblock2' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDconv repr  where
+  dconv ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDelay repr  where
+  delay ::
+    ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+  delay' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDelay1 repr  where
+  delay1 ::
+    ASig repr
+    -> repr (ASig repr)
+  delay1' :: ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDelayk repr  where
+  delayk ::
+    KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  delayk' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsDelayw repr  where
+  delayw ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDeltap repr  where
+  deltap ::
+    KSig repr
+    -> repr (ASig repr)
+  deltap' :: KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDeltap3 repr a where
+  deltap3 ::
+    a
+    -> repr (ASig repr)
+  deltap3' :: a
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDeltapi repr a where
+  deltapi ::
+    a
+    -> repr (ASig repr)
+  deltapi' :: a
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDeltapn repr a where
+  deltapn ::
+    a
+    -> repr (ASig repr)
+  deltapn' :: a
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDeltapx repr  where
+  deltapx ::
+    ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+  deltapx' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDeltapxw repr  where
+  deltapxw ::
+    ASig repr
+    -> ASig repr
+    -> INum repr
+    -> repr ()
+  deltapxw' :: ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDenorm repr  where
+  denorm ::
+    [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDiff repr out a where
+  diff ::
+    a
+    -> repr out
+  diff' :: a
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsDiskgrain repr d  where
+  diskgrain ::
+    VString repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+  diskgrain' :: VString repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsDiskin repr d  where
+  diskin ::
+    VString repr
+    -> KSig repr
+    -> repr (TList d (ASig repr))
+  diskin' :: VString repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsDiskin2 repr d  where
+  diskin2 ::
+    VString repr
+    -> KSig repr
+    -> repr (TList d (ASig repr))
+  diskin2' :: VString repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsDistort repr  where
+  distort ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  distort' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDistort1 repr  where
+  distort1 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  distort1' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDiv repr out a b where
+  div ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsDivz repr out a b where
+  divz ::
+    a
+    -> b
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsDoppler repr  where
+  doppler ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  doppler' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDownsamp repr  where
+  downsamp ::
+    ASig repr
+    -> repr (KSig repr)
+  downsamp' :: ASig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsDripwater repr  where
+  dripwater ::
+    KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  dripwater' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsDumpk repr  where
+  dumpk ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDumpk2 repr  where
+  dumpk2 ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDumpk3 repr  where
+  dumpk3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDumpk4 repr  where
+  dumpk4 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsDuserrnd repr out  where
+  duserrnd ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsEndin repr  where
+  endin ::
+    repr ()
+
+
+class (CsoundClass repr) => CsEndop repr  where
+  endop ::
+    repr ()
+
+
+class (CsoundClass repr) => CsEnvlpx repr out a where
+  envlpx ::
+    a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  envlpx' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsEnvlpxr repr out a where
+  envlpxr ::
+    a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  envlpxr' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsEphasor repr out a where
+  ephasor ::
+    a
+    -> KSig repr
+    -> repr (out,out)
+  ephasor' :: a
+    -> KSig repr
+    -> INum repr
+    -> repr (out,out)
+
+
+class (CsoundClass repr) => CsEqfil repr  where
+  eqfil ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  eqfil' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsEvent_i repr  where
+  event_i ::
+    VString repr
+    -> VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsExitnow repr  where
+  exitnow ::
+    repr ()
+
+
+class (CsoundClass repr) => CsExp repr out a where
+  exp ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsExpcurve repr  where
+  expcurve ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsExpon repr out  where
+  expon ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsExprand repr out  where
+  exprand ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsExpseg repr out  where
+  expseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr out
+
+
+class (CsoundClass repr) => CsExpsega repr  where
+  expsega ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsExpsegr repr out  where
+  expsegr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr out
+
+
+class (CsoundClass repr) => CsFiclose repr  where
+  ficlose ::
+    VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFilebit repr  where
+  filebit ::
+    VString repr
+    -> repr (INum repr)
+  filebit' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilelen repr  where
+  filelen ::
+    VString repr
+    -> repr (INum repr)
+  filelen' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilenchnls repr  where
+  filenchnls ::
+    VString repr
+    -> repr (INum repr)
+  filenchnls' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilepeak repr  where
+  filepeak ::
+    VString repr
+    -> repr (INum repr)
+  filepeak' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilesr repr  where
+  filesr ::
+    VString repr
+    -> repr (INum repr)
+  filesr' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilevalid repr  where
+  filevalid ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFilter2 repr out a where
+  filter2 ::
+    a
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr out
+
+
+class (CsoundClass repr) => CsFin repr  where
+  fin ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFini repr  where
+  fini ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFink repr  where
+  fink ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFiopen repr  where
+  fiopen ::
+    VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFlanger repr  where
+  flanger ::
+    ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  flanger' :: ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFlashtxt repr  where
+  flashtxt ::
+    INum repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFlooper repr  where
+  flooper ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFlooper2 repr a where
+  flooper2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  flooper2' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> a
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFlooper3 repr  where
+  flooper3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  flooper3' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFloor repr out a where
+  floor ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsFmb3 repr  where
+  fmb3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmbell repr  where
+  fmbell ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmmetal repr  where
+  fmmetal ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmpercfl repr  where
+  fmpercfl ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmrhode repr  where
+  fmrhode ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmvoice repr  where
+  fmvoice ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFmwurlie repr  where
+  fmwurlie ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFof repr a b c where
+  fof ::
+    a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  fof' :: a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFof2 repr a b c where
+  fof2 ::
+    a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  fof2' :: a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFofilter repr  where
+  fofilter ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  fofilter' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFog repr a b c where
+  fog ::
+    a
+    -> b
+    -> c
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  fog' :: a
+    -> b
+    -> c
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFold repr  where
+  fold ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFollow repr  where
+  follow ::
+    ASig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFollow2 repr  where
+  follow2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFoscil repr a b c where
+  foscil ::
+    a
+    -> KSig repr
+    -> b
+    -> c
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  foscil' :: a
+    -> KSig repr
+    -> b
+    -> c
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFoscili repr a b c where
+  foscili ::
+    a
+    -> KSig repr
+    -> b
+    -> c
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  foscili' :: a
+    -> KSig repr
+    -> b
+    -> c
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsFout repr  where
+  fout ::
+    VString repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFouti repr  where
+  fouti ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFoutir repr  where
+  foutir ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFoutk repr  where
+  foutk ::
+    VString repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFprintks repr a where
+  fprintks ::
+    VString repr
+    -> VString repr
+    -> [a]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFprints repr a where
+  fprints ::
+    VString repr
+    -> VString repr
+    -> [a]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFrac repr out a where
+  frac ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsFreeverb repr  where
+  freeverb ::
+    ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr)
+  freeverb' :: ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsFtchnls repr  where
+  ftchnls ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtconv repr d  where
+  ftconv ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+  ftconv' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsFtcps repr  where
+  ftcps ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtfree repr  where
+  ftfree ::
+    INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtgen repr  where
+  ftgen ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> VString repr
+    -> [INum repr]
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtgenonce repr  where
+  ftgenonce ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> [INum repr]
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtgentmp repr  where
+  ftgentmp ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> [INum repr]
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtlen repr  where
+  ftlen ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtload repr  where
+  ftload ::
+    VString repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtloadk repr  where
+  ftloadk ::
+    VString repr
+    -> KSig repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtlptim repr  where
+  ftlptim ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsFtmorf repr  where
+  ftmorf ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtsave repr  where
+  ftsave ::
+    VString repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtsavek repr  where
+  ftsavek ::
+    VString repr
+    -> KSig repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsFtsr repr  where
+  ftsr ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsGain repr  where
+  gain ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  gain' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGainslider repr  where
+  gainslider ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsGauss repr out  where
+  gauss ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsGbuzz repr a b where
+  gbuzz ::
+    a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  gbuzz' :: a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGetcfg repr  where
+  getcfg ::
+    INum repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsGogobel repr  where
+  gogobel ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGrain repr a b c where
+  grain ::
+    a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  grain' :: a
+    -> b
+    -> c
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGrain2 repr  where
+  grain2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  grain2' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGrain3 repr  where
+  grain3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  grain3' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGranule repr a where
+  granule ::
+    a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  granule' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsGuiro repr  where
+  guiro ::
+    KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  guiro' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHarmon repr  where
+  harmon ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHarmon2 repr  where
+  harmon2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  harmon2' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHarmon3 repr  where
+  harmon3 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  harmon3' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHarmon4 repr  where
+  harmon4 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  harmon4' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHilbert repr  where
+  hilbert ::
+    ASig repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsHrtfer repr  where
+  hrtfer ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsHrtfmove repr  where
+  hrtfmove ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> VString repr
+    -> repr (ASig repr, ASig repr)
+  hrtfmove' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsHrtfmove2 repr  where
+  hrtfmove2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> VString repr
+    -> repr (ASig repr, ASig repr)
+  hrtfmove2' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> VString repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsHrtfstat repr  where
+  hrtfstat ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> VString repr
+    -> repr (ASig repr, ASig repr)
+  hrtfstat' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsHsboscil repr  where
+  hsboscil ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  hsboscil' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsHvs1 repr  where
+  hvs1 ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  hvs1' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsHvs2 repr  where
+  hvs2 ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  hvs2' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsHvs3 repr  where
+  hvs3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  hvs3' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsICS repr  where
+  iCS ::
+    KSig repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsIhold repr  where
+  ihold ::
+    repr ()
+
+
+class (CsoundClass repr) => CsInCS repr  where
+  inCS ::
+    repr (ASig repr)
+
+
+class (CsoundClass repr) => CsInch repr d  where
+  inch ::
+    [KSig repr]
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsInitc14 repr  where
+  initc14 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsInitc21 repr  where
+  initc21 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsInitc7 repr  where
+  initc7 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsInleta repr  where
+  inleta ::
+    VString repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsInletf repr  where
+  inletf ::
+    VString repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsInletk repr  where
+  inletk ::
+    VString repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsInq repr  where
+  inq ::
+    repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsInrg repr  where
+  inrg ::
+    KSig repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsIns repr  where
+  ins ::
+    repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsInsglobal repr  where
+  insglobal ::
+    VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsInsremot repr  where
+  insremot ::
+    VString repr
+    -> VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsInstr repr  where
+  instr ::
+    repr ()
+
+
+class (CsoundClass repr) => CsInt repr out a where
+  int ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsInteg repr out a where
+  integ ::
+    a
+    -> repr out
+  integ' :: a
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsInterp repr  where
+  interp ::
+    KSig repr
+    -> repr (ASig repr)
+  interp' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsInvalue repr out  where
+  invalue ::
+    VString repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsInz repr  where
+  inz ::
+    KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsJitter repr  where
+  jitter ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsJitter2 repr  where
+  jitter2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsJspline repr out a where
+  jspline ::
+    a
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsKCS repr  where
+  kCS ::
+    INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsKtableseg repr  where
+  ktableseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsLfo repr out  where
+  lfo ::
+    KSig repr
+    -> KSig repr
+    -> repr out
+  lfo' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLimit repr out a where
+  limit ::
+    a
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLine repr out  where
+  line ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLinen repr out a where
+  linen ::
+    a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLinenr repr out a where
+  linenr ::
+    a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLineto repr  where
+  lineto ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLinrand repr out  where
+  linrand ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsLinseg repr out  where
+  linseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr out
+
+
+class (CsoundClass repr) => CsLinsegr repr out  where
+  linsegr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr out
+
+
+class (CsoundClass repr) => CsLocsend repr d  where
+  locsend ::
+    repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsLocsig repr d  where
+  locsig ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsLog repr out a where
+  log ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsLog10 repr out a where
+  log10 ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsLogbtwo repr out a where
+  logbtwo ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsLogcurve repr  where
+  logcurve ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLoopseg repr  where
+  loopseg ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLoopsegp repr  where
+  loopsegp ::
+    KSig repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLooptseg repr  where
+  looptseg ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLoopxseg repr  where
+  loopxseg ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLorenz repr  where
+  lorenz ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+  lorenz' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsLorismorph repr  where
+  lorismorph ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsLorisplay repr  where
+  lorisplay ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLorisread repr  where
+  lorisread ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  lorisread' :: KSig repr
+    -> VString repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsLoscil repr d a where
+  loscil ::
+    a
+    -> KSig repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+  loscil' :: a
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsLoscil3 repr d a where
+  loscil3 ::
+    a
+    -> KSig repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+  loscil3' :: a
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsLoscilx repr d a where
+  loscilx ::
+    a
+    -> KSig repr
+    -> VString repr
+    -> repr (TList d (ASig repr))
+  loscilx' :: a
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsLowpass2 repr  where
+  lowpass2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  lowpass2' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLowres repr  where
+  lowres ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  lowres' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLowresx repr  where
+  lowresx ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  lowresx' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLpf18 repr  where
+  lpf18 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLpform repr  where
+  lpform ::
+    KSig repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsLpfreson repr  where
+  lpfreson ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLphasor repr a where
+  lphasor ::
+    a
+    -> repr (ASig repr)
+  lphasor' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLpinterp repr  where
+  lpinterp ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsLposcil repr  where
+  lposcil ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  lposcil' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLposcil3 repr  where
+  lposcil3 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  lposcil3' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLposcila repr  where
+  lposcila ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  lposcila' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLposcilsa repr  where
+  lposcilsa ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  lposcilsa' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsLposcilsa2 repr  where
+  lposcilsa2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  lposcilsa2' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsLpread repr  where
+  lpread ::
+    KSig repr
+    -> VString repr
+    -> repr (KSig repr, KSig repr, KSig repr, KSig repr)
+  lpread' :: KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr, KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsLpreson repr  where
+  lpreson ::
+    ASig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsLpshold repr  where
+  lpshold ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLpsholdp repr  where
+  lpsholdp ::
+    KSig repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsLpslot repr  where
+  lpslot ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMac repr  where
+  mac ::
+    [(KSig repr, ASig repr)]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMaca repr  where
+  maca ::
+    [ASig repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMadsr repr out  where
+  madsr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  madsr' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMandel repr  where
+  mandel ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsMandol repr  where
+  mandol ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  mandol' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMarimba repr  where
+  marimba ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  marimba' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMassign repr  where
+  massign ::
+    INum repr
+    -> VString repr
+    -> repr ()
+  massign' :: INum repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMax_k repr  where
+  max_k ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMaxabsaccum repr  where
+  maxabsaccum ::
+    ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMaxaccum repr  where
+  maxaccum ::
+    ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMaxalloc repr  where
+  maxalloc ::
+    VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMaxk repr  where
+  maxk ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMclock repr  where
+  mclock ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMdelay repr  where
+  mdelay ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMedian repr  where
+  median ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  median' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMediank repr  where
+  mediank ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  mediank' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMetro repr  where
+  metro ::
+    KSig repr
+    -> repr (KSig repr)
+  metro' :: KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMidglobal repr  where
+  midglobal ::
+    VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidic14 repr out  where
+  midic14 ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  midic14' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMidic21 repr out  where
+  midic21 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  midic21' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMidic7 repr out  where
+  midic7 ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+  midic7' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMidichannelaftertouch repr a where
+  midichannelaftertouch ::
+    a
+    -> repr ()
+  midichannelaftertouch' :: a
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidichn repr  where
+  midichn ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsMidicontrolchange repr a b where
+  midicontrolchange ::
+    a
+    -> b
+    -> repr ()
+  midicontrolchange' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidictrl repr out  where
+  midictrl ::
+    INum repr
+    -> repr out
+  midictrl' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMididefault repr a b where
+  mididefault ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidiin repr  where
+  midiin ::
+    repr (KSig repr, KSig repr, KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsMidinoteoff repr a b where
+  midinoteoff ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidinoteoncps repr a b where
+  midinoteoncps ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidinoteonkey repr a b where
+  midinoteonkey ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidinoteonoct repr a b where
+  midinoteonoct ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidinoteonpch repr a b where
+  midinoteonpch ::
+    a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidion repr  where
+  midion ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidion2 repr  where
+  midion2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidiout repr  where
+  midiout ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidipgm repr  where
+  midipgm ::
+    repr (INum repr)
+  midipgm' :: INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsMidipitchbend repr a where
+  midipitchbend ::
+    a
+    -> repr ()
+  midipitchbend' :: a
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidipolyaftertouch repr a b where
+  midipolyaftertouch ::
+    a
+    -> b
+    -> repr ()
+  midipolyaftertouch' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMidiprogramchange repr a where
+  midiprogramchange ::
+    a
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMiditempo repr  where
+  miditempo ::
+    repr (KSig repr)
+
+
+class (CsoundClass repr) => CsMidremot repr  where
+  midremot ::
+    VString repr
+    -> VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMinabsaccum repr  where
+  minabsaccum ::
+    ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMinaccum repr  where
+  minaccum ::
+    ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMincer repr d  where
+  mincer ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (TList d (ASig repr))
+  mincer' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsMirror repr out a where
+  mirror ::
+    a
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsMod repr out a b where
+  mod ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsMode repr  where
+  mode ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  mode' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsModmatrix repr  where
+  modmatrix ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMonitor repr d  where
+  monitor ::
+    repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsMoog repr  where
+  moog ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMoogladder repr  where
+  moogladder ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  moogladder' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMoogvcf repr a b where
+  moogvcf ::
+    ASig repr
+    -> a
+    -> b
+    -> repr (ASig repr)
+  moogvcf' :: ASig repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMoogvcf2 repr a b where
+  moogvcf2 ::
+    ASig repr
+    -> a
+    -> b
+    -> repr (ASig repr)
+  moogvcf2' :: ASig repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMoscil repr  where
+  moscil ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMpulse repr  where
+  mpulse ::
+    KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  mpulse' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMrtmsg repr  where
+  mrtmsg ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMul repr out a b where
+  mul ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsMultitap repr  where
+  multitap ::
+    ASig repr
+    -> [INum repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsMute repr  where
+  mute ::
+    VString repr
+    -> repr ()
+  mute' :: VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMutex_lock repr  where
+  mutex_lock ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMutex_locki repr  where
+  mutex_locki ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMutex_unlock repr  where
+  mutex_unlock ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMutex_unlocki repr  where
+  mutex_unlocki ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsMxadsr repr out  where
+  mxadsr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  mxadsr' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsNestedap repr  where
+  nestedap ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  nestedap' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsNlalp repr  where
+  nlalp ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  nlalp' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsNlfilt repr  where
+  nlfilt ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsNoise repr a where
+  noise ::
+    a
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsNot repr out a where
+  not ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsNoteoff repr  where
+  noteoff ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsNoteon repr  where
+  noteon ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsNoteondur repr  where
+  noteondur ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsNoteondur2 repr  where
+  noteondur2 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsNotnum repr  where
+  notnum ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsNreverb repr  where
+  nreverb ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  nreverb' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsNrpn repr  where
+  nrpn ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsNsamp repr  where
+  nsamp ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsNstrnum repr  where
+  nstrnum ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsNtrpol repr out a b where
+  ntrpol ::
+    a
+    -> b
+    -> KSig repr
+    -> repr out
+  ntrpol' :: a
+    -> b
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOctave repr out a where
+  octave ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsOctcps repr out  where
+  octcps ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOctmidi repr  where
+  octmidi ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsOctmidib repr out  where
+  octmidib ::
+    repr out
+  octmidib' :: INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOctmidinn repr out  where
+  octmidinn ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOctpch repr out  where
+  octpch ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOpcode repr  where
+  opcode ::
+    repr ()
+
+
+class (CsoundClass repr) => CsOr repr out a b where
+  or ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsOscbnk repr  where
+  oscbnk ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> repr (ASig repr)
+  oscbnk' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOscil repr out a b where
+  oscil ::
+    a
+    -> b
+    -> INum repr
+    -> repr out
+  oscil' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOscil1 repr  where
+  oscil1 ::
+    INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsOscil1i repr  where
+  oscil1i ::
+    INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsOscil3 repr out a b where
+  oscil3 ::
+    a
+    -> b
+    -> INum repr
+    -> repr out
+  oscil3' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOscili repr out a b where
+  oscili ::
+    a
+    -> b
+    -> INum repr
+    -> repr out
+  oscili' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOscilikt repr out a b where
+  oscilikt ::
+    a
+    -> b
+    -> KSig repr
+    -> repr out
+  oscilikt' :: a
+    -> b
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsOsciliktp repr  where
+  osciliktp ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  osciliktp' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOscilikts repr a b where
+  oscilikts ::
+    a
+    -> b
+    -> KSig repr
+    -> ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  oscilikts' :: a
+    -> b
+    -> KSig repr
+    -> ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOsciln repr  where
+  osciln ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOscils repr  where
+  oscils ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  oscils' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOscilx repr  where
+  oscilx ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsOut32 repr  where
+  out32 ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutc repr  where
+  outc ::
+    [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutch repr  where
+  outch ::
+    [(KSig repr, ASig repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOuth repr  where
+  outh ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutiat repr  where
+  outiat ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutic repr  where
+  outic ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutic14 repr  where
+  outic14 ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutipat repr  where
+  outipat ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutipb repr  where
+  outipb ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutipc repr  where
+  outipc ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkat repr  where
+  outkat ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkc repr  where
+  outkc ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkc14 repr  where
+  outkc14 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkpat repr  where
+  outkpat ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkpb repr  where
+  outkpb ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutkpc repr  where
+  outkpc ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutleta repr  where
+  outleta ::
+    VString repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutletf repr  where
+  outletf ::
+    VString repr
+    -> FSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutletk repr  where
+  outletk ::
+    VString repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutq1 repr  where
+  outq1 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutq2 repr  where
+  outq2 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutq3 repr  where
+  outq3 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutq4 repr  where
+  outq4 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutrg repr  where
+  outrg ::
+    KSig repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOuts1 repr  where
+  outs1 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOuts2 repr  where
+  outs2 ::
+    ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutx repr  where
+  outx ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsOutz repr  where
+  outz ::
+    KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsP repr out  where
+  p ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPan repr  where
+  pan ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  pan' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsPan2 repr a where
+  pan2 ::
+    ASig repr
+    -> a
+    -> repr (ASig repr, ASig repr)
+  pan2' :: ASig repr
+    -> a
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsPareq repr  where
+  pareq ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pareq' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPartials repr  where
+  partials ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsPcauchy repr out  where
+  pcauchy ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPchbend repr out  where
+  pchbend ::
+    repr out
+  pchbend' :: INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPchmidi repr  where
+  pchmidi ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsPchmidib repr out  where
+  pchmidib ::
+    repr out
+  pchmidib' :: INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPchmidinn repr out  where
+  pchmidinn ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPchoct repr out  where
+  pchoct ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPconvolve repr d  where
+  pconvolve ::
+    ASig repr
+    -> VString repr
+    -> repr (TList d (ASig repr))
+  pconvolve' :: ASig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsPcount repr  where
+  pcount ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsPdclip repr  where
+  pdclip ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pdclip' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPdhalf repr  where
+  pdhalf ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pdhalf' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPdhalfy repr  where
+  pdhalfy ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pdhalfy' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPeak repr a where
+  peak ::
+    a
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsPgmassign repr  where
+  pgmassign ::
+    INum repr
+    -> VString repr
+    -> repr ()
+  pgmassign' :: INum repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPgmchn repr  where
+  pgmchn ::
+    repr (KSig repr, KSig repr)
+  pgmchn' :: INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsPhaser1 repr  where
+  phaser1 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  phaser1' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPhaser2 repr  where
+  phaser2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPhasorbnk repr out a where
+  phasorbnk ::
+    a
+    -> KSig repr
+    -> INum repr
+    -> repr out
+  phasorbnk' :: a
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPindex repr  where
+  pindex ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsPinkish repr a where
+  pinkish ::
+    a
+    -> repr (ASig repr)
+  pinkish' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPitch repr  where
+  pitch ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+  pitch' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsPitchac repr  where
+  pitchac ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsPitchamdf repr  where
+  pitchamdf ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+  pitchamdf' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsPlanet repr  where
+  planet ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+  planet' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsPluck repr  where
+  pluck ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  pluck' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPoisson repr out  where
+  poisson ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPolyaft repr out  where
+  polyaft ::
+    INum repr
+    -> repr out
+  polyaft' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPolynomial repr  where
+  polynomial ::
+    ASig repr
+    -> [KSig repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPop_f repr  where
+  pop_f ::
+    repr (FSig repr)
+
+
+class (CsoundClass repr) => CsPort repr  where
+  port ::
+    KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  port' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsPortk repr  where
+  portk ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  portk' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsPoscil repr out a b where
+  poscil ::
+    a
+    -> b
+    -> INum repr
+    -> repr out
+  poscil' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPoscil3 repr out  where
+  poscil3 ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+  poscil3' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPow repr out a where
+  pow ::
+    a
+    -> KSig repr
+    -> repr out
+  pow' :: a
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsPowershape repr  where
+  powershape ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  powershape' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPowoftwo repr out a where
+  powoftwo ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsPrealloc repr  where
+  prealloc ::
+    VString repr
+    -> INum repr
+    -> repr ()
+  prealloc' :: VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrepiano repr d  where
+  prepiano ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+  prepiano' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsPrint repr  where
+  print ::
+    [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrintf_i repr  where
+  printf_i ::
+    VString repr
+    -> INum repr
+    -> VString repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrintk repr  where
+  printk ::
+    INum repr
+    -> KSig repr
+    -> repr ()
+  printk' :: INum repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrintk2 repr  where
+  printk2 ::
+    KSig repr
+    -> repr ()
+  printk2' :: KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrintks repr a where
+  printks ::
+    VString repr
+    -> INum repr
+    -> [a]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPrints repr a where
+  prints ::
+    VString repr
+    -> [a]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsProduct repr  where
+  product ::
+    [ASig repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPset repr  where
+  pset ::
+    [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPtrack repr  where
+  ptrack ::
+    ASig repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+  ptrack' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsPush repr  where
+  push ::
+    [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPush_f repr  where
+  push_f ::
+    FSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPuts repr  where
+  puts ::
+    VString repr
+    -> KSig repr
+    -> repr ()
+  puts' :: VString repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPvadd repr  where
+  pvadd ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  pvadd' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPvbufread repr  where
+  pvbufread ::
+    KSig repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsPvcross repr  where
+  pvcross ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pvcross' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPvinterp repr  where
+  pvinterp ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPvoc repr  where
+  pvoc ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> repr (ASig repr)
+  pvoc' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsPvread repr  where
+  pvread ::
+    KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsadsyn repr  where
+  pvsadsyn ::
+    FSig repr
+    -> INum repr
+    -> KSig repr
+    -> repr (ASig repr)
+  pvsadsyn' :: FSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsanal repr  where
+  pvsanal ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr)
+  pvsanal' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsarp repr  where
+  pvsarp ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsbandp repr a b c d e where
+  pvsbandp ::
+    FSig repr
+    -> a
+    -> b
+    -> c
+    -> d
+    -> repr (FSig repr)
+  pvsbandp' :: FSig repr
+    -> a
+    -> b
+    -> c
+    -> d
+    -> e
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsbandr repr a b c d e where
+  pvsbandr ::
+    FSig repr
+    -> a
+    -> b
+    -> c
+    -> d
+    -> repr (FSig repr)
+  pvsbandr' :: FSig repr
+    -> a
+    -> b
+    -> c
+    -> d
+    -> e
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsbin repr out  where
+  pvsbin ::
+    FSig repr
+    -> KSig repr
+    -> repr (out,out)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsblur repr  where
+  pvsblur ::
+    FSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsbuffer repr  where
+  pvsbuffer ::
+    FSig repr
+    -> INum repr
+    -> repr (INum repr, KSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsbufread repr a b where
+  pvsbufread ::
+    KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+  pvsbufread' :: KSig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvscent repr out  where
+  pvscent ::
+    FSig repr
+    -> repr out
+
+
+class (CsoundClass repr, PVS repr) => CsPvscross repr  where
+  pvscross ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsdemix repr  where
+  pvsdemix ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsdisp repr  where
+  pvsdisp ::
+    FSig repr
+    -> repr ()
+  pvsdisp' :: FSig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr, PVS repr) => CsPvsfilter repr a where
+  pvsfilter ::
+    FSig repr
+    -> FSig repr
+    -> a
+    -> repr (FSig repr)
+  pvsfilter' :: FSig repr
+    -> FSig repr
+    -> a
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsfread repr  where
+  pvsfread ::
+    KSig repr
+    -> VString repr
+    -> repr (FSig repr)
+  pvsfread' :: KSig repr
+    -> VString repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsfreeze repr  where
+  pvsfreeze ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsftr repr  where
+  pvsftr ::
+    FSig repr
+    -> INum repr
+    -> repr ()
+  pvsftr' :: FSig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr, PVS repr) => CsPvsftw repr  where
+  pvsftw ::
+    FSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  pvsftw' :: FSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsfwrite repr  where
+  pvsfwrite ::
+    FSig repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr, PVS repr) => CsPvshift repr a b c d where
+  pvshift ::
+    FSig repr
+    -> a
+    -> KSig repr
+    -> repr (FSig repr)
+  pvshift' :: FSig repr
+    -> a
+    -> KSig repr
+    -> b
+    -> c
+    -> d
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsifd repr  where
+  pvsifd ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr, FSig repr)
+  pvsifd' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr, FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsin repr  where
+  pvsin ::
+    KSig repr
+    -> repr (FSig repr)
+  pvsin' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsinfo repr  where
+  pvsinfo ::
+    FSig repr
+    -> repr (INum repr, INum repr, INum repr, INum repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsinit repr  where
+  pvsinit ::
+    INum repr
+    -> repr (FSig repr)
+  pvsinit' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvslock repr  where
+  pvslock ::
+    FSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsmaska repr  where
+  pvsmaska ::
+    FSig repr
+    -> INum repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsmix repr  where
+  pvsmix ::
+    FSig repr
+    -> FSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsmooth repr a b where
+  pvsmooth ::
+    FSig repr
+    -> a
+    -> b
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsmorph repr  where
+  pvsmorph ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsosc repr  where
+  pvsosc ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+  pvsosc' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsout repr  where
+  pvsout ::
+    FSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr, PVS repr) => CsPvspitch repr  where
+  pvspitch ::
+    FSig repr
+    -> KSig repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvstencil repr  where
+  pvstencil ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsvoc repr a where
+  pvsvoc ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (FSig repr)
+  pvsvoc' :: FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> a
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr, PVS repr) => CsPvsynth repr  where
+  pvsynth ::
+    FSig repr
+    -> repr (ASig repr)
+  pvsynth' :: FSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsRand repr out a where
+  rand ::
+    a
+    -> repr out
+  rand' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRandh repr out a b where
+  randh ::
+    a
+    -> b
+    -> repr out
+  randh' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRandi repr out a b where
+  randi ::
+    a
+    -> b
+    -> repr out
+  randi' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRandom repr out  where
+  random ::
+    KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRandomh repr out a where
+  randomh ::
+    KSig repr
+    -> KSig repr
+    -> a
+    -> repr out
+
+
+class (CsoundClass repr) => CsRandomi repr out a where
+  randomi ::
+    KSig repr
+    -> KSig repr
+    -> a
+    -> repr out
+
+
+class (CsoundClass repr) => CsRbjeq repr  where
+  rbjeq ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  rbjeq' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsReadclock repr  where
+  readclock ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsReadk repr  where
+  readk ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsReadk2 repr  where
+  readk2 ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsReadk3 repr  where
+  readk3 ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsReadk4 repr  where
+  readk4 ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr, KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsReadks repr  where
+  readks ::
+    VString repr
+    -> INum repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsRelease repr  where
+  release ::
+    repr (KSig repr)
+
+
+class (CsoundClass repr) => CsRemoteport repr  where
+  remoteport ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsRemove repr  where
+  remove ::
+    VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsRepluck repr  where
+  repluck ::
+    INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> ASig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsReson repr  where
+  reson ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  reson' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsResonk repr  where
+  resonk ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  resonk' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsResonr repr  where
+  resonr ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  resonr' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsResonx repr  where
+  resonx ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  resonx' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsResonxk repr  where
+  resonxk ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  resonxk' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsResony repr  where
+  resony ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> repr (ASig repr)
+  resony' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsResonz repr  where
+  resonz ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  resonz' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsResyn repr  where
+  resyn ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsReverb repr  where
+  reverb ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  reverb' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsReverb2 repr  where
+  reverb2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  reverb2' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsReverbsc repr  where
+  reverbsc ::
+    ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr)
+  reverbsc' :: ASig repr
+    -> ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsRewindscore repr  where
+  rewindscore ::
+    repr ()
+
+
+class (CsoundClass repr) => CsRezzy repr a b where
+  rezzy ::
+    ASig repr
+    -> a
+    -> b
+    -> repr (ASig repr)
+  rezzy' :: ASig repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsRireturn repr  where
+  rireturn ::
+    repr ()
+
+
+class (CsoundClass repr) => CsRms repr  where
+  rms ::
+    ASig repr
+    -> repr (KSig repr)
+  rms' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsRnd repr out  where
+  rnd ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRnd31 repr out  where
+  rnd31 ::
+    KSig repr
+    -> KSig repr
+    -> repr out
+  rnd31' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRound repr out a where
+  round ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsRspline repr out a b where
+  rspline ::
+    a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsRtclock repr out  where
+  rtclock ::
+    repr out
+
+
+class (CsoundClass repr) => CsSamphold repr out a b where
+  samphold ::
+    a
+    -> b
+    -> repr out
+  samphold' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsSandpaper repr  where
+  sandpaper ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  sandpaper' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsScale repr  where
+  scale ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsScanhammer repr  where
+  scanhammer ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsScans repr  where
+  scans ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  scans' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsScantable repr  where
+  scantable ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsScanu repr  where
+  scanu ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSchedule repr  where
+  schedule ::
+    VString repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSchedwhen repr  where
+  schedwhen ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsScoreline repr  where
+  scoreline ::
+    VString repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsScoreline_i repr  where
+  scoreline_i ::
+    VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSeed repr  where
+  seed ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSekere repr  where
+  sekere ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  sekere' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSemitone repr out a where
+  semitone ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsSeqtime repr  where
+  seqtime ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSeqtime2 repr  where
+  seqtime2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSetctrl repr  where
+  setctrl ::
+    INum repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSetksmps repr  where
+  setksmps ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSetscorepos repr  where
+  setscorepos ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSfilist repr  where
+  sfilist ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSfinstr repr a b where
+  sfinstr ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  sfinstr' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSfinstr3 repr a b where
+  sfinstr3 ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  sfinstr3' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSfinstr3m repr a b where
+  sfinstr3m ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  sfinstr3m' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSfinstrm repr a b where
+  sfinstrm ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  sfinstrm' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSfload repr  where
+  sfload ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsSflooper repr  where
+  sflooper ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr)
+  sflooper' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSfpassign repr  where
+  sfpassign ::
+    INum repr
+    -> INum repr
+    -> repr ()
+  sfpassign' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSfplay repr a b where
+  sfplay ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  sfplay' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSfplay3 repr a b where
+  sfplay3 ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  sfplay3' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSfplay3m repr a b where
+  sfplay3m ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> repr (ASig repr)
+  sfplay3m' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSfplaym repr a b where
+  sfplaym ::
+    INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> repr (ASig repr)
+  sfplaym' :: INum repr
+    -> INum repr
+    -> a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSfplist repr  where
+  sfplist ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSfpreset repr  where
+  sfpreset ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsShaker repr  where
+  shaker ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  shaker' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsShl repr out a b where
+  shl ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsShr repr out a b where
+  shr ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsSin repr out a where
+  sin ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsSinh repr out a where
+  sinh ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsSininv repr out a where
+  sininv ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsSinsyn repr  where
+  sinsyn ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSleighbells repr  where
+  sleighbells ::
+    KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  sleighbells' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSlider16table repr  where
+  slider16table ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSlider16tablef repr  where
+  slider16tablef ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSlider8table repr  where
+  slider8table ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSlider8tablef repr  where
+  slider8tablef ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSndload repr  where
+  sndload ::
+    VString repr
+    -> repr ()
+  sndload' :: VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSndloop repr  where
+  sndloop ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsSndwarp repr d a b c where
+  sndwarp ::
+    a
+    -> b
+    -> c
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsSndwarpst repr d a b c where
+  sndwarpst ::
+    a
+    -> b
+    -> c
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsSockrecv repr  where
+  sockrecv ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSockrecvs repr  where
+  sockrecvs ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSocksend repr  where
+  socksend ::
+    ASig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSocksends repr  where
+  socksends ::
+    ASig repr
+    -> ASig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSoundin repr d  where
+  soundin ::
+    VString repr
+    -> repr (TList d (ASig repr))
+  soundin' :: VString repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsSoundout repr  where
+  soundout ::
+    ASig repr
+    -> VString repr
+    -> repr ()
+  soundout' :: ASig repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSoundouts repr  where
+  soundouts ::
+    ASig repr
+    -> ASig repr
+    -> VString repr
+    -> repr ()
+  soundouts' :: ASig repr
+    -> ASig repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSpace repr  where
+  space ::
+    ASig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSpat3d repr  where
+  spat3d ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  spat3d' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSpat3di repr  where
+  spat3di ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  spat3di' :: ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSpat3dt repr  where
+  spat3dt ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  spat3dt' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSpdist repr  where
+  spdist ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSplitrig repr  where
+  splitrig ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSprintf repr  where
+  sprintf ::
+    VString repr
+    -> VString repr
+    -> [(INum repr, INum repr)]
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsSpsend repr  where
+  spsend ::
+    repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSqrt repr out a where
+  sqrt ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsStack repr  where
+  stack ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsStatevar repr  where
+  statevar ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  statevar' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsStix repr  where
+  stix ::
+    INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  stix' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsStrcat repr  where
+  strcat ::
+    VString repr
+    -> VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrcatk repr  where
+  strcatk ::
+    VString repr
+    -> VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrchar repr  where
+  strchar ::
+    VString repr
+    -> repr (INum repr)
+  strchar' :: VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrchark repr a where
+  strchark ::
+    VString repr
+    -> repr (KSig repr)
+  strchark' :: VString repr
+    -> a
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsStrcmp repr  where
+  strcmp ::
+    VString repr
+    -> VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrcmpk repr  where
+  strcmpk ::
+    VString repr
+    -> VString repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsStrcpy repr  where
+  strcpy ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrcpyk repr  where
+  strcpyk ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrecv repr  where
+  strecv ::
+    VString repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsStreson repr  where
+  streson ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsStrget repr  where
+  strget ::
+    INum repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrindex repr  where
+  strindex ::
+    VString repr
+    -> VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrindexk repr  where
+  strindexk ::
+    VString repr
+    -> VString repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsStrlen repr  where
+  strlen ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrlenk repr  where
+  strlenk ::
+    VString repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsStrlower repr  where
+  strlower ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrlowerk repr  where
+  strlowerk ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrrindex repr  where
+  strrindex ::
+    VString repr
+    -> VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrrindexk repr  where
+  strrindexk ::
+    VString repr
+    -> VString repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsStrset repr  where
+  strset ::
+    INum repr
+    -> VString repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsStrsub repr  where
+  strsub ::
+    VString repr
+    -> repr (VString repr)
+  strsub' :: VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrsubk repr  where
+  strsubk ::
+    VString repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrtod repr  where
+  strtod ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrtol repr  where
+  strtol ::
+    VString repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsStrupper repr  where
+  strupper ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStrupperk repr  where
+  strupperk ::
+    VString repr
+    -> repr (VString repr)
+
+
+class (CsoundClass repr) => CsStsend repr  where
+  stsend ::
+    ASig repr
+    -> VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSub repr out a b where
+  sub ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsSubinstr repr d  where
+  subinstr ::
+    VString repr
+    -> [INum repr]
+    -> repr (TList d (ASig repr))
+
+
+class (CsoundClass repr) => CsSubinstrinit repr  where
+  subinstrinit ::
+    VString repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsSum repr  where
+  sum ::
+    [ASig repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSvfilter repr  where
+  svfilter ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+  svfilter' :: ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSyncgrain repr  where
+  syncgrain ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSyncloop repr  where
+  syncloop ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  syncloop' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsSyncphasor repr a where
+  syncphasor ::
+    a
+    -> ASig repr
+    -> repr (ASig repr, ASig repr)
+  syncphasor' :: a
+    -> ASig repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsSystem repr a where
+  system ::
+    KSig repr
+    -> VString repr
+    -> repr (KSig repr)
+  system' :: KSig repr
+    -> VString repr
+    -> a
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsSystem_i repr  where
+  system_i ::
+    INum repr
+    -> VString repr
+    -> repr (INum repr)
+  system_i' :: INum repr
+    -> VString repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsTab repr out a where
+  tab ::
+    a
+    -> INum repr
+    -> repr out
+  tab' :: a
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTab_i repr  where
+  tab_i ::
+    INum repr
+    -> INum repr
+    -> repr (INum repr)
+  tab_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsTable repr out a where
+  table ::
+    a
+    -> INum repr
+    -> repr out
+  table' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTable3 repr out a where
+  table3 ::
+    a
+    -> INum repr
+    -> repr out
+  table3' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTablecopy repr  where
+  tablecopy ::
+    KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablegpw repr  where
+  tablegpw ::
+    KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablei repr out a where
+  tablei ::
+    a
+    -> INum repr
+    -> repr out
+  tablei' :: a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTableicopy repr  where
+  tableicopy ::
+    INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTableigpw repr  where
+  tableigpw ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTableikt repr out a where
+  tableikt ::
+    a
+    -> KSig repr
+    -> repr out
+  tableikt' :: a
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTableimix repr  where
+  tableimix ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTableiw repr  where
+  tableiw ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  tableiw' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablekt repr out a where
+  tablekt ::
+    a
+    -> KSig repr
+    -> repr out
+  tablekt' :: a
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTablemix repr  where
+  tablemix ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTableng repr out  where
+  tableng ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTablera repr  where
+  tablera ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTableseg repr  where
+  tableseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablew repr a b where
+  tablew ::
+    a
+    -> b
+    -> INum repr
+    -> repr ()
+  tablew' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablewa repr  where
+  tablewa ::
+    KSig repr
+    -> ASig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTablewkt repr a b where
+  tablewkt ::
+    a
+    -> b
+    -> KSig repr
+    -> repr ()
+  tablewkt' :: a
+    -> b
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTablexkt repr a where
+  tablexkt ::
+    a
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  tablexkt' :: a
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTablexseg repr  where
+  tablexseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTabmorph repr  where
+  tabmorph ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [INum repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTabmorpha repr  where
+  tabmorpha ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> [INum repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTabmorphak repr  where
+  tabmorphak ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [INum repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTabmorphi repr  where
+  tabmorphi ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [INum repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTabplay repr  where
+  tabplay ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTabrec repr  where
+  tabrec ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTabsum repr a b where
+  tabsum ::
+    INum repr
+    -> repr (KSig repr)
+  tabsum' :: INum repr
+    -> a
+    -> b
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTabw repr a b where
+  tabw ::
+    a
+    -> b
+    -> INum repr
+    -> repr ()
+  tabw' :: a
+    -> b
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTabw_i repr  where
+  tabw_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  tabw_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTambourine repr  where
+  tambourine ::
+    KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  tambourine' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTan repr out a where
+  tan ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsTanh repr out a where
+  tanh ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsTaninv repr out a where
+  taninv ::
+    a
+    -> repr out
+
+
+class (CsoundClass repr) => CsTaninv2 repr out a b where
+  taninv2 ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb0 repr out  where
+  tb0 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb0_init repr  where
+  tb0_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb1 repr out  where
+  tb1 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb10 repr out  where
+  tb10 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb10_init repr  where
+  tb10_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb11 repr out  where
+  tb11 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb11_init repr  where
+  tb11_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb12 repr out  where
+  tb12 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb12_init repr  where
+  tb12_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb13 repr out  where
+  tb13 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb13_init repr  where
+  tb13_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb14 repr out  where
+  tb14 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb14_init repr  where
+  tb14_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb15 repr out  where
+  tb15 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb15_init repr  where
+  tb15_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb1_init repr  where
+  tb1_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb2 repr out  where
+  tb2 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb2_init repr  where
+  tb2_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb3 repr out  where
+  tb3 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb3_init repr  where
+  tb3_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb4 repr out  where
+  tb4 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb4_init repr  where
+  tb4_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb5 repr out  where
+  tb5 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb5_init repr  where
+  tb5_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb6 repr out  where
+  tb6 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb6_init repr  where
+  tb6_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb7 repr out  where
+  tb7 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb7_init repr  where
+  tb7_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb8 repr out  where
+  tb8 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb8_init repr  where
+  tb8_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTb9 repr out  where
+  tb9 ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTb9_init repr  where
+  tb9_init ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTbvcf repr a b where
+  tbvcf ::
+    ASig repr
+    -> a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  tbvcf' :: ASig repr
+    -> a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTempest repr  where
+  tempest ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+  tempest' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTempo repr  where
+  tempo ::
+    KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTempoval repr  where
+  tempoval ::
+    repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTimedseq repr  where
+  timedseq ::
+    KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTimeinstk repr  where
+  timeinstk ::
+    repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTimeinsts repr  where
+  timeinsts ::
+    repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTimek repr out  where
+  timek ::
+    repr out
+
+
+class (CsoundClass repr) => CsTimes repr out  where
+  times ::
+    repr out
+
+
+class (CsoundClass repr) => CsTival repr  where
+  tival ::
+    repr (INum repr)
+
+
+class (CsoundClass repr) => CsTlineto repr  where
+  tlineto ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTone repr  where
+  tone ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  tone' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTonek repr  where
+  tonek ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+  tonek' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTonex repr  where
+  tonex ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  tonex' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTradsyn repr  where
+  tradsyn ::
+    FSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsTrandom repr  where
+  trandom ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTranseg repr out  where
+  transeg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr out
+
+
+class (CsoundClass repr) => CsTransegr repr out  where
+  transegr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr out
+
+
+class (CsoundClass repr) => CsTrcross repr  where
+  trcross ::
+    FSig repr
+    -> FSig repr
+    -> KSig repr
+    -> [KSig repr]
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsTrfilter repr  where
+  trfilter ::
+    FSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsTrigger repr  where
+  trigger ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsTrigseq repr  where
+  trigseq ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTrirand repr out  where
+  trirand ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsTrmix repr  where
+  trmix ::
+    FSig repr
+    -> FSig repr
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsTrscale repr  where
+  trscale ::
+    FSig repr
+    -> [KSig repr]
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsTrshift repr  where
+  trshift ::
+    FSig repr
+    -> [KSig repr]
+    -> repr (FSig repr)
+
+
+class (CsoundClass repr) => CsTrsplit repr  where
+  trsplit ::
+    FSig repr
+    -> [KSig repr]
+    -> repr (FSig repr, FSig repr)
+
+
+class (CsoundClass repr) => CsTurnoff repr  where
+  turnoff ::
+    repr ()
+
+
+class (CsoundClass repr) => CsTurnoff2 repr  where
+  turnoff2 ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsTurnon repr  where
+  turnon ::
+    VString repr
+    -> repr ()
+  turnon' :: VString repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsUnirand repr out  where
+  unirand ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsUpsamp repr  where
+  upsamp ::
+    KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsUrd repr out  where
+  urd ::
+    KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsVadd repr a b where
+  vadd ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  vadd' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVadd_i repr  where
+  vadd_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vadd_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVaddv repr a b c where
+  vaddv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vaddv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVaddv_i repr  where
+  vaddv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vaddv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVaget repr  where
+  vaget ::
+    KSig repr
+    -> ASig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsValpass repr a where
+  valpass ::
+    ASig repr
+    -> KSig repr
+    -> a
+    -> INum repr
+    -> repr (ASig repr)
+  valpass' :: ASig repr
+    -> KSig repr
+    -> a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVaset repr  where
+  vaset ::
+    KSig repr
+    -> KSig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVbap4 repr a b where
+  vbap4 ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  vbap4' :: ASig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVbap4move repr  where
+  vbap4move ::
+    ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVbaplsinit repr  where
+  vbaplsinit ::
+    INum repr
+    -> INum repr
+    -> repr ()
+  vbaplsinit' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVbapz repr a b where
+  vbapz ::
+    INum repr
+    -> INum repr
+    -> ASig repr
+    -> KSig repr
+    -> repr ()
+  vbapz' :: INum repr
+    -> INum repr
+    -> ASig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVbapzmove repr  where
+  vbapzmove ::
+    INum repr
+    -> INum repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVcella repr  where
+  vcella ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vcella' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVco2 repr a where
+  vco2 ::
+    KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  vco2' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [a]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVco2ft repr  where
+  vco2ft ::
+    KSig repr
+    -> repr (KSig repr)
+  vco2ft' :: KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsVco2ift repr  where
+  vco2ift ::
+    INum repr
+    -> repr (INum repr)
+  vco2ift' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsVco2init repr  where
+  vco2init ::
+    INum repr
+    -> repr (INum repr)
+  vco2init' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsVcomb repr a where
+  vcomb ::
+    ASig repr
+    -> KSig repr
+    -> a
+    -> INum repr
+    -> repr (ASig repr)
+  vcomb' :: ASig repr
+    -> KSig repr
+    -> a
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVcopy repr a b c where
+  vcopy ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vcopy' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVcopy_i repr  where
+  vcopy_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vcopy_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVdel_k repr  where
+  vdel_k ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  vdel_k' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsVdelayk repr  where
+  vdelayk ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  vdelayk' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsVdelayx repr  where
+  vdelayx ::
+    ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  vdelayx' :: ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVdelayxq repr  where
+  vdelayxq ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  vdelayxq' :: ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVdelayxs repr  where
+  vdelayxs ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  vdelayxs' :: ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVdelayxw repr  where
+  vdelayxw ::
+    ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  vdelayxw' :: ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVdelayxwq repr  where
+  vdelayxwq ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+  vdelayxwq' :: ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr, ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVdelayxws repr  where
+  vdelayxws ::
+    ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+  vdelayxws' :: ASig repr
+    -> ASig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr, ASig repr)
+
+
+class (CsoundClass repr) => CsVdivv repr a b c where
+  vdivv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vdivv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVdivv_i repr  where
+  vdivv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vdivv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVecdelay repr  where
+  vecdelay ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vecdelay' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVeloc repr  where
+  veloc ::
+    repr (INum repr)
+  veloc' :: INum repr
+    -> INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsVexp repr a b where
+  vexp ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  vexp' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVexp_i repr  where
+  vexp_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vexp_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVexpseg repr  where
+  vexpseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVexpv repr a b c where
+  vexpv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vexpv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVexpv_i repr  where
+  vexpv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vexpv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVibes repr  where
+  vibes ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVibr repr  where
+  vibr ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsVibrato repr  where
+  vibrato ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr)
+  vibrato' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsVincr repr  where
+  vincr ::
+    ASig repr
+    -> ASig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVlimit repr  where
+  vlimit ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVlinseg repr  where
+  vlinseg ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVlowres repr  where
+  vlowres ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVmap repr  where
+  vmap ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vmap' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVmirror repr  where
+  vmirror ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVmult repr a b where
+  vmult ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  vmult' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVmult_i repr  where
+  vmult_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vmult_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVmultv repr a b c where
+  vmultv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vmultv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVmultv_i repr  where
+  vmultv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vmultv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVoice repr  where
+  voice ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVosim repr  where
+  vosim ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  vosim' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVphaseseg repr  where
+  vphaseseg ::
+    KSig repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVport repr  where
+  vport ::
+    INum repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+  vport' :: INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVpow repr a b where
+  vpow ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  vpow' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> a
+    -> b
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVpow_i repr  where
+  vpow_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vpow_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVpowv repr a b c where
+  vpowv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vpowv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVpowv_i repr  where
+  vpowv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vpowv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVpvoc repr  where
+  vpvoc ::
+    KSig repr
+    -> KSig repr
+    -> VString repr
+    -> repr (ASig repr)
+  vpvoc' :: KSig repr
+    -> KSig repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsVrandh repr  where
+  vrandh ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+  vrandh' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVrandi repr  where
+  vrandi ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+  vrandi' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVsubv repr a b c where
+  vsubv ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> repr ()
+  vsubv' :: INum repr
+    -> INum repr
+    -> KSig repr
+    -> a
+    -> b
+    -> c
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVsubv_i repr  where
+  vsubv_i ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+  vsubv_i' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtaba repr  where
+  vtaba ::
+    ASig repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtabi repr  where
+  vtabi ::
+    INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtabk repr  where
+  vtabk ::
+    KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtable1k repr  where
+  vtable1k ::
+    KSig repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablea repr  where
+  vtablea ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablei repr  where
+  vtablei ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablek repr  where
+  vtablek ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablewa repr  where
+  vtablewa ::
+    ASig repr
+    -> KSig repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablewi repr  where
+  vtablewi ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtablewk repr  where
+  vtablewk ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtabwa repr  where
+  vtabwa ::
+    ASig repr
+    -> INum repr
+    -> [ASig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtabwi repr  where
+  vtabwi ::
+    INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVtabwk repr  where
+  vtabwk ::
+    KSig repr
+    -> INum repr
+    -> [KSig repr]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsVwrap repr  where
+  vwrap ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsWaveset repr  where
+  waveset ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  waveset' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWeibull repr out  where
+  weibull ::
+    KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsWgbow repr  where
+  wgbow ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  wgbow' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgbowedbar repr  where
+  wgbowedbar ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+  wgbowedbar' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgbrass repr  where
+  wgbrass ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  wgbrass' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgclar repr  where
+  wgclar ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  wgclar' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgflute repr  where
+  wgflute ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (ASig repr)
+  wgflute' :: KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgpluck repr  where
+  wgpluck ::
+    INum repr
+    -> INum repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> ASig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWgpluck2 repr  where
+  wgpluck2 ::
+    INum repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWguide1 repr a where
+  wguide1 ::
+    ASig repr
+    -> a
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWguide2 repr a b where
+  wguide2 ::
+    ASig repr
+    -> a
+    -> b
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsWrap repr out a where
+  wrap ::
+    a
+    -> KSig repr
+    -> KSig repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsWterrain repr  where
+  wterrain ::
+    KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsXadsr repr out  where
+  xadsr ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+  xadsr' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr out
+
+
+class (CsoundClass repr) => CsXor repr out a b where
+  xor ::
+    a
+    -> b
+    -> repr out
+
+
+class (CsoundClass repr) => CsXout repr  where
+  xout ::
+    [(INum repr, INum repr)]
+    -> repr ()
+
+
+class (CsoundClass repr) => CsXscanmap repr  where
+  xscanmap ::
+    INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr (KSig repr, KSig repr)
+  xscanmap' :: INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsXscans repr  where
+  xscans ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+  xscans' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsXscansmap repr  where
+  xscansmap ::
+    KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> repr ()
+  xscansmap' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsXscanu repr  where
+  xscanu ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> VString repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> KSig repr
+    -> KSig repr
+    -> ASig repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsXtratim repr  where
+  xtratim ::
+    INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsXyin repr  where
+  xyin ::
+    INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+  xyin' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> INum repr
+    -> repr (KSig repr, KSig repr)
+
+
+class (CsoundClass repr) => CsZacl repr  where
+  zacl ::
+    KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZakinit repr  where
+  zakinit ::
+    INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZamod repr  where
+  zamod ::
+    ASig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsZar repr  where
+  zar ::
+    KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsZarg repr  where
+  zarg ::
+    KSig repr
+    -> KSig repr
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsZaw repr  where
+  zaw ::
+    ASig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZawm repr  where
+  zawm ::
+    ASig repr
+    -> KSig repr
+    -> repr ()
+  zawm' :: ASig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZfilter2 repr  where
+  zfilter2 ::
+    ASig repr
+    -> KSig repr
+    -> KSig repr
+    -> INum repr
+    -> INum repr
+    -> [INum repr]
+    -> repr (ASig repr)
+
+
+class (CsoundClass repr) => CsZir repr  where
+  zir ::
+    INum repr
+    -> repr (INum repr)
+
+
+class (CsoundClass repr) => CsZiw repr  where
+  ziw ::
+    INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZiwm repr  where
+  ziwm ::
+    INum repr
+    -> INum repr
+    -> repr ()
+  ziwm' :: INum repr
+    -> INum repr
+    -> INum repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZkcl repr  where
+  zkcl ::
+    KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZkmod repr  where
+  zkmod ::
+    KSig repr
+    -> KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsZkr repr  where
+  zkr ::
+    KSig repr
+    -> repr (KSig repr)
+
+
+class (CsoundClass repr) => CsZkw repr  where
+  zkw ::
+    KSig repr
+    -> KSig repr
+    -> repr ()
+
+
+class (CsoundClass repr) => CsZkwm repr  where
+  zkwm ::
+    KSig repr
+    -> KSig repr
+    -> repr ()
+  zkwm' :: KSig repr
+    -> KSig repr
+    -> INum repr
+    -> repr ()
diff --git a/src/Language/XDsp/Semantics/CsoundExt/Core.hs b/src/Language/XDsp/Semantics/CsoundExt/Core.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/CsoundExt/Core.hs
@@ -0,0 +1,18 @@
+module Language.XDsp.Semantics.CsoundExt.Core (
+  CsoundClass (..)
+)
+
+where
+
+import Language.XDsp.Semantics.Core
+import Language.XDsp.Semantics.BasicExtensions
+
+-- ---------------------------------
+-- ---------------------------------
+-- csound-specific language extensions.  Although these could be implemented
+-- in other backends, doing so may be un-idiomatic
+
+class (Dsp repr, StringVar repr) => CsoundClass repr where
+  nchnls   :: Int -> repr Int
+  set0dbfs :: Double -> repr Double
+
diff --git a/src/Language/XDsp/Semantics/Extras.hs b/src/Language/XDsp/Semantics/Extras.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/Extras.hs
@@ -0,0 +1,28 @@
+module Language.XDsp.Semantics.Extras (
+  module Language.XDsp.Semantics.Extras.Delay
+ ,module Language.XDsp.Semantics.Extras.FSig
+ ,a
+ ,k
+ ,i
+)
+
+where
+
+import           Language.XDsp.Semantics.Core
+
+import           Language.XDsp.Semantics.Extras.Delay
+import           Language.XDsp.Semantics.Extras.FSig
+
+-- a few helper functions
+
+-- | Restrict a value to `ASig` type
+a :: Dsp repr => ASig repr -> ASig repr
+a = id
+
+-- | Restrict a value to `KSig` type
+k :: Dsp repr => KSig repr -> KSig repr
+k = id
+
+-- | Restrict a value to `INum` type
+i :: Dsp repr => INum repr -> INum repr
+i = id
diff --git a/src/Language/XDsp/Semantics/Extras/Delay.hs b/src/Language/XDsp/Semantics/Extras/Delay.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/Extras/Delay.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts #-}
+
+module Language.XDsp.Semantics.Extras.Delay (
+  Delay (..)
+ ,DelayNet (..)
+)
+
+where
+
+import Language.XDsp.Semantics.Core
+import Control.Applicative
+
+-- ---------------------------------
+-- ---------------------------------
+-- delay networks
+
+class Dsp repr => Delay repr where
+  delaySamp :: ASig repr -> repr (ASig repr)
+  vdelay3   :: ASig repr
+               -> ASig repr
+               -> INum repr
+               -> repr (ASig repr)
+
+class Dsp repr => DelayNet repr where
+  type DelayN repr :: * -> *
+  runDelay :: INum repr -> ASig repr -> DelayN repr a -> repr a
+  tapK     :: KSig repr -> DelayN repr (ASig repr)
+  tapA     :: ASig repr -> DelayN repr (ASig repr)
+  tapI     :: INum repr -> DelayN repr (ASig repr)
diff --git a/src/Language/XDsp/Semantics/Extras/FSig.hs b/src/Language/XDsp/Semantics/Extras/FSig.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/XDsp/Semantics/Extras/FSig.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
+
+module Language.XDsp.Semantics.Extras.FSig
+
+where
+import Language.XDsp.Semantics.Core
+
+-- ---------------------------------
+-- ---------------------------------
+-- fsig processing
+
+class Dsp repr => PVS repr where
+  data FSig repr :: *
diff --git a/tools/CsMaps.hs b/tools/CsMaps.hs
new file mode 100644
--- /dev/null
+++ b/tools/CsMaps.hs
@@ -0,0 +1,40 @@
+module CsMaps where
+
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+-- | classes that need to be imported qualified to prevent clashes
+qualifiedNameMap :: M.Map String String
+qualifiedNameMap = M.fromList [("CsOscili", "CSE")
+                              ,("CsOscil",  "CSE")
+                              ,("CsSum",    "CSE") ]
+
+qualifyName :: String -> String
+qualifyName nm = maybe nm ( ++ "." ++ nm) $ M.lookup nm qualifiedNameMap
+
+-- | Map any csound names which are unallowed in Haskell to valid names
+invalidNameMap :: M.Map String String
+invalidNameMap = M.fromList [("in", "inCS")
+                            ,("i",  "iCS")
+                            ,("k",  "kCS")
+                            ,("a",  "aCS")]
+
+-- | Anything in this set is already bound as part of the core language
+-- and shouldn't be re-bound
+noReuseSet :: S.Set String
+noReuseSet = S.fromList ["vdelay3"
+                        ,"vdelay"
+                        ,"out"
+                        ,"outs"
+                        ,"outq"
+                        ,"outo"
+                        ,"phasor"
+                        ,"slider32table"
+                        ,"slider32tablef"
+                        ,"slider64table"
+                        ,"slider64tablef" ]
+
+-- | if a function needs a special context, add it
+addCtxt :: String -> [String]
+addCtxt str | take 3 str == "pvs" = ["PVS repr"] -- PVS context (for FSig)
+addCtxt _ = []
diff --git a/tools/CsParser.hs b/tools/CsParser.hs
new file mode 100644
--- /dev/null
+++ b/tools/CsParser.hs
@@ -0,0 +1,309 @@
+module CsParser where
+
+import           Control.Monad.Error
+import           Control.Monad.State
+import           Control.Monad.Writer
+import           Data.List (intercalate)
+import           Data.Maybe
+
+-- http://www.perceptionfactory.com/csound/csound5extending.html
+-- there's got to be a better way to encode this.  Maybe something like
+-- a partial order?
+mixL  a   b | a == b = a
+mixL 'i' 'k' = 'k'
+mixL 'i' 'a' = 'x'
+mixL 'i' 'x' = 'x'
+mixL 'i' 'S' = 'x'
+mixL 'k' 'i' = 'k'
+mixL 'k' 'a' = 'x'
+mixL 'k' 'x' = 'x'
+mixL 'k' 'S' = 'x'
+mixL 'a' 'i' = 'x'
+mixL 'a' 'k' = 'x'
+mixL 'a' 'x' = 'x'
+mixL 'a' 'S' = 'x'
+mixL 'x' 'i' = 'x'
+mixL 'x' 'k' = 'x'
+mixL 'x' 'a' = 'x'
+mixL 'S' 'i' = 'x'
+mixL 'S' 'k' = 'x'
+mixL 'S' 'a' = 'x'
+mixL 'S' 'x' = 'x'
+mixL _   _   = '*' -- don't have any means to handle other intypes yet.
+
+-- | polyvar codes:
+-- s : perf-time, a+k
+-- c : control-time, k+i+S
+-- v : any-time, a+k+i+S
+mixLO :: Char -> Char -> Either String Char
+mixLO 'v'  _  = return 'v'
+mixLO  _  'v' = return 'v'
+mixLO 's' 'i' = return 'v'
+mixLO 's' 'c' = return 'v'
+mixLO 's' 'S' = return 'v'
+mixLO 's'  _  = return 's'
+mixLO 'c' 's' = return 'v'
+mixLO 'c' 'a' = return 'v'
+mixLO 'c'  _  = return 'c' -- c,i,k,S
+mixLO 'a' 'i' = return 'v'
+mixLO 'a' 'k' = return 's'
+mixLO 'a' 's' = return 's'
+mixLO 'a' 'c' = return 'v'
+mixLO 'a' 'S' = return 'v'
+mixLO 'k' 'i' = return 'c'
+mixLO 'k' 'a' = return 's'
+mixLO 'k' 's' = return 's'
+mixLO 'k' 'c' = return 'c'
+mixLO 'k' 'S' = return 'c'
+mixLO 'i' 'k' = return 'c'
+mixLO 'i' 'a' = return 'v'
+mixLO 'i' 'c' = return 'c'
+mixLO 'i' 's' = return 'v'
+mixLO 'i' 'S' = return 'c'
+mixLO 'S' 'i' = return 'c'
+mixLO 'S' 'k' = return 'c'
+mixLO 'S' 'a' = return 'v'
+mixLO 'S' 'c' = return 'c'
+mixLO 'S' 's' = return 'v'
+mixLO a b
+  | a == b    = return a
+  | otherwise = throwError $ "mixLO unexpected combination: " ++ [a,' ',b]
+
+type ArgCtx r = StateT (Int,((Int,Int), Bool)) (Writer [String]) r
+
+getLbl = do
+  (x,b) <- get
+  put (succ x,b)
+  return (toEnum x)
+
+incr = do
+  (x,((i1,i2),b)) <- get
+  if not b
+    then put (x,((succ i1,i2),b))
+    else put (x,((i1,succ i2),b))
+
+setOpt = do
+  (x,((i1,i2),b)) <- get
+  if not b
+    then put (x,((succ i1,i2),True))
+    else put (x,((i1,succ i2),True))
+
+tellS s = tell [s] >> return Nothing
+
+optIRateInargs = "opqvjh"
+
+parseInarg :: Char -> ArgCtx (Maybe String)
+parseInarg 'a' = incr >> return (Just "ASig repr")
+parseInarg 'k' = incr >> return (Just "KSig repr")
+parseInarg 'i' = incr >> return (Just "INum repr")
+parseInarg 'f' = incr >> return (Just "FSig repr")
+parseInarg 'O' = setOpt >> getLbl >>= \l -> return $
+  Just ([l]) -- optional i or k var
+parseInarg 'p' = setOpt >> return (Just "INum repr")
+parseInarg 'S' = incr >> return (Just "VString repr")
+parseInarg 'T' = incr >> return (Just "VString repr") -- a file, which can either be a file name or a number (e.g. pvoc.nnn)
+parseInarg 'x' = incr >> getLbl >>= \l -> return $
+  Just [l] -- i or k var
+parseInarg 'm' = incr >> return (Just "[INum repr]")
+parseInarg 'M' = incr >> getLbl >>= \l -> return (Just $ "[" ++ [l] ++ "]")
+parseInarg 'N' = incr >> return
+  (Just "[(INum repr, INum repr)]")
+parseInarg 'y' = incr >> return (Just "[ASig repr]")
+parseInarg 'z' = incr >> return (Just "[KSig repr]")
+parseInarg 'Z' = incr >> return (Just "[(KSig repr, ASig repr)]")
+parseInarg c
+  | c `elem` optIRateInargs = setOpt >> return (Just "INum repr")
+parseInarg z   = tellS $ "unknown inarg: " ++ [z]
+
+inargLbls :: Int -> Char -> ArgCtx (Maybe Int)
+inargLbls i 'O' = parseInarg 'O' >> return (Just i)
+inargLbls i 'x' = parseInarg 'x' >> return (Just i)
+inargLbls i 'M' = parseInarg 'M' >> return (Just i)
+inargLbls i c   = parseInarg c   >> return Nothing
+
+-- | Left if in the instance head, Right if in the decl.
+inArgInstanceInfo :: Char -> Either String String
+inArgInstanceInfo 'a' = Right "(ASig (S n))"
+inArgInstanceInfo 'k' = Right "(KSig (S n))"
+inArgInstanceInfo 'i' = Right "(INum (S n))"
+inArgInstanceInfo 'f' = Right "(FSig (S n))"
+inArgInstanceInfo 'o' = Right "(INum (S n))"
+inArgInstanceInfo 'O' = Left  "KVar "
+inArgInstanceInfo 'p' = Right "(INum (S n))"
+inArgInstanceInfo 'S' = Right "(VString (S n))"
+inArgInstanceInfo 'T' = Right "(VString (S n))"
+inArgInstanceInfo 'x' = Left  "Varable "
+inArgInstanceInfo 'm' = Right "[INum (S n)]"
+inArgInstanceInfo 'M' = Left  "Varable "
+inArgInstanceInfo 'N' = Right "[(INum (S n), INum (S n))]"
+inArgInstanceInfo 'y' = Right "[ASig (S n)]"
+inArgInstanceInfo 'z' = Right "[KSig (S n)]"
+inArgInstanceInfo 'Z' = Right "[(KSig (S n), ASig (S n))]"
+inArgInstanceInfo _   = error "invalid inArg in 'inArgInstanceInfo'"
+
+-- | modifications that change the number of inargs, must come before
+--   other manipulations of inargs
+preMungeInarg :: String -> String
+preMungeInarg = concatMap f
+ where
+  f 'n' = "iN"
+    -- convert an odd-numbered list to a required arg and even-numbered list
+  f c   = [c]
+
+-- | for an inarg, calc.
+-- (totalNumArgs, [VarPos (0ix), VarName], Maybe reqNum)
+getInArgTyVars :: String -> Either String (Int, [(Int,Char)], Maybe Int)
+getInArgTyVars instrng' =
+  either (Left)
+         (\(tyvars,_,tnum,mreq) ->
+             Right $ (tnum,zip (catMaybes mres) tyvars,mreq))
+         (runParseI instrng)
+ where
+  instrng = preMungeInarg instrng'
+  ((mres, _), _) =
+    runWriter $ runStateT (mapM (uncurry inargLbls) $ zip [0..] instrng)
+                          (fromEnum 'a', ((-1,-1), False))
+  
+
+runParseI :: String -> Either String ([Char], [String], Int, Maybe Int) -- (type variables, args, totalnum, maybe number of required args)
+runParseI instrng' =
+  maybe (Left $ intercalate "\n\t" (instrng:errS))
+        (\resstrn -> Right
+                     (['a' .. toEnum (lastLbl-1)]
+                     ,resstrn
+                     ,numReq+numOpt+2
+                     ,if hasOpts then Just numReq else Nothing))
+        (sequence mres)
+ where
+  instrng = preMungeInarg instrng'
+  ((mres, (lastLbl,((numReq,numOpt), hasOpts))), errS) =
+    runWriter $ runStateT (mapM parseInarg instrng)
+                          (fromEnum 'a', ((-1,-1), False))
+
+
+parseOutarg :: String -> Either String OType
+parseOutarg ""  = Right U
+parseOutarg "a" = Right A
+parseOutarg "k" = Right K
+parseOutarg "i" = Right I
+parseOutarg "f" = Right F
+parseOutarg "ik" = Right IK
+parseOutarg "ki" = Right KI
+parseOutarg "kk" = Right KK
+parseOutarg "ff" = Right FF
+parseOutarg "aa" = Right AA
+parseOutarg "ak" = Right AK
+parseOutarg "kkk"  = Right KKK
+parseOutarg "aaa"  = Right AAA
+parseOutarg "kkkk" = Right KKKK
+parseOutarg "aaaa" = Right AAAA
+parseOutarg "iiii" = Right IIII
+parseOutarg "c" = Right C
+parseOutarg "v" = Right V
+parseOutarg "s" = Right S
+parseOutarg "ss" = Right SS
+parseOutarg "S" = Right Str
+parseOutarg arg
+ | arg == replicate (length arg) 'm' = Right MA
+ | otherwise                         = Left $ "can't parse outarg: " ++ arg
+
+data OType =
+   A
+ | K
+ | I
+ | F
+ | U
+ | IK
+ | KI
+ | KK
+ | FF
+ | AA
+ | AK
+ | AAA
+ | KKK
+ | AAAA
+ | KKKK
+ | IIII
+ | C
+ | V
+ | S
+ | SS
+ | Str
+ | MA
+ deriving (Eq, Show, Read, Ord, Enum)
+
+data OCtxt = OCtxt {
+  var :: Bool
+ ,nat :: Bool }
+ deriving (Eq, Show)
+
+hasOCtxt (OCtxt b1 b2) = b1 || b2
+
+nullCtxt = OCtxt False False
+outCtxt  = OCtxt True  False
+natCtxt  = OCtxt False True
+
+getCtxt (OCtxt False False) = ""
+getCtxt (OCtxt True  False) = "out "
+getCtxt (OCtxt False  True) = "d "
+getCtxt (OCtxt True   True) = "out d "
+
+-- | convert OType to a ctxtRepr (for mkClass)
+ctxtRepr U  = (nullCtxt, "repr ()")
+ctxtRepr A = (nullCtxt, "repr (ASig repr)")
+ctxtRepr K = (nullCtxt, "repr (KSig repr)")
+ctxtRepr I = (nullCtxt, "repr (INum repr)")
+ctxtRepr F = (nullCtxt, "repr (FSig repr)")
+ctxtRepr IK = (nullCtxt, "repr (INum repr, KSig repr)")
+ctxtRepr KI = (nullCtxt, "repr (KSig repr, INum repr)")
+ctxtRepr KK = (nullCtxt, "repr (KSig repr, KSig repr)")
+ctxtRepr FF = (nullCtxt, "repr (FSig repr, FSig repr)")
+ctxtRepr AA = (nullCtxt, "repr (ASig repr, ASig repr)")
+ctxtRepr AK = (nullCtxt, "repr (ASig repr, KSig repr)")
+ctxtRepr AAA = (nullCtxt, "repr (ASig repr, ASig repr, ASig repr)")
+ctxtRepr KKK = (nullCtxt, "repr (KSig repr, KSig repr, KSig repr)")
+ctxtRepr AAAA = (nullCtxt, "repr (ASig repr, ASig repr, ASig repr, ASig repr)")
+ctxtRepr KKKK = (nullCtxt, "repr (KSig repr, KSig repr, KSig repr, KSig repr)")
+ctxtRepr IIII = (nullCtxt, "repr (INum repr, INum repr, INum repr, INum repr)")
+ctxtRepr MA   = (natCtxt, "repr (TList d (ASig repr))")
+ctxtRepr S    = (outCtxt, "repr out")
+ctxtRepr V    = (outCtxt, "repr out")
+ctxtRepr C    = (outCtxt, "repr out")
+ctxtRepr SS   = (outCtxt, "repr (out,out)")
+ctxtRepr Str  = (nullCtxt, "repr (VString repr)")
+
+iHasCtxt = fst . ctxtRepr
+
+-- | convert OType to data for instance heads
+instrCtx S  = Just ("PVar out",1)
+instrCtx SS = Just ("PVar out",2)
+instrCtx C  = Just ("KVar out",1)
+instrCtx V  = Just ("Varable out",1)
+instrCtx MA = Just ("Nat d",1)
+instrCtx _  = Nothing
+
+oHasCtxt = isJust . instrCtx
+
+-- | determine the proper outtype for instance decls
+monoCtxt A    = "(ASig (S n))"
+monoCtxt K    = "(KSig (S n))"
+monoCtxt I    = "(INum (S n))"
+monoCtxt F    = "(FSig (S n))"
+monoCtxt U    = "()"
+monoCtxt IK   = "(INum (S n), KSig (S n))"
+monoCtxt KI   = "(KSig (S n), INum (S n))"
+monoCtxt KK   = "(KSig (S n), KSig (S n))"
+monoCtxt FF   = "(FSig (S n), FSig (S n))"
+monoCtxt AA   = "(ASig (S n), ASig (S n))"
+monoCtxt AK   = "(ASig (S n), KSig (S n))"
+monoCtxt AAA  = "(ASig (S n), ASig (S n), ASig (S n))"
+monoCtxt KKK  = "(KSig (S n), KSig (S n), KSig (S n))"
+monoCtxt AAAA = "(ASig (S n), ASig (S n), ASig (S n), ASig (S n))"
+monoCtxt KKKK = "(KSig (S n), KSig (S n), KSig (S n), KSig (S n))"
+monoCtxt IIII = "(INum (S n), INum (S n), INum (S n), INum (S n))"
+monoCtxt Str  = "(VString (S n))"
+monoCtxt MA   = "d"
+monoCtxt S    = "out"
+monoCtxt SS   = "out"
+monoCtxt C    = "out"
+monoCtxt V    = "out"
diff --git a/tools/CsoundImplTemplate.hs b/tools/CsoundImplTemplate.hs
new file mode 100644
--- /dev/null
+++ b/tools/CsoundImplTemplate.hs
@@ -0,0 +1,823 @@
+{-# LANGUAGE
+     NoMonomorphismRestriction
+    ,DoRec
+    ,ExtendedDefaultRules
+    ,TypeFamilies
+    ,DeriveDataTypeable
+    ,DeriveFunctor
+    ,GeneralizedNewtypeDeriving
+    ,ScopedTypeVariables
+    ,MultiParamTypeClasses
+    ,FlexibleInstances
+    ,TupleSections
+    ,OverlappingInstances
+    ,TypeSynonymInstances #-}
+
+module Language.XDsp.Implementations.Csound (
+  S (..)
+ ,BusType (..)
+ ,HostOut (..)
+ ,RType
+ ,defaultRType
+ ,unifyCsd
+ ,writeHeader
+ ,makeInstrument
+ ,TList
+ ,unTList'
+ ,module Language.XDsp.Semantics.CsoundExt
+)
+
+where
+
+import           Language.XDsp.Semantics
+import           Language.XDsp.Semantics.CsoundExt hiding (CsOscil (..), CsOscili (..), CsSum (..))
+import qualified Language.XDsp.Semantics.CsoundExt as CSE
+
+import           Data.Char
+import           Data.Data
+import           Data.List (intersperse, intercalate)
+import qualified Data.Map as M
+import           Data.Maybe (fromMaybe, catMaybes)
+import qualified Data.Set as S
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as TL
+import           Data.TypeLevel.Num ((:>=:), Nat, toInt)
+import           Control.Monad.RWS
+import           Control.Applicative
+import           Control.Arrow
+
+import           Text.Printf
+
+-- ---------------------------------
+-- ---------------------------------
+
+-- |Initial csound pretty-printer
+
+data CVar =
+    Cnst Double
+  | CStr String
+  | CVar String
+  deriving (Eq, Ord, Show, Read)
+
+data VarType =
+    A                  -- A-rate signal
+  | K                  -- K-rate signal
+  | I                  -- i-time value
+  | F                  -- fsig
+  | T                  -- function table
+  | IC                 -- score i-statement
+  | St                 -- String
+  | U                  -- Unit
+  | Tp VarType VarType -- tuple
+  | T3 VarType VarType VarType         -- 3-tuple
+  | T4 VarType VarType VarType VarType -- 4-element tuple
+  | CList VarType      -- list
+  deriving (Eq, Ord, Read, Show)
+
+-- | get the initial character of a csound var from a VarType
+mkChr :: VarType -> Char
+mkChr T  = 'f'
+mkChr IC = 'i'
+mkChr St = 'i'  -- string type stored in ivals
+mkChr x = toLower . head . show $ x
+
+getLbl :: CVar -> String
+getLbl (Cnst x)   = show x
+getLbl (CStr s)   = show s
+getLbl (CVar s)   = s
+
+-- |Polyvariadic support for building argument lists
+class ArgListBuilder r where
+  appendToList :: [String] -> r
+
+instance ArgListBuilder [String] where
+  appendToList = reverse
+
+instance (Varable a, ArgListBuilder r) => ArgListBuilder (a -> r) where
+  appendToList arg = appendToList . (\acc a -> getVarLbl a : acc) arg
+
+mkOp0 :: Varable out => String -> S n out
+mkOp0 opname = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s\n" outName opname
+  return out
+
+-- |helper function to create a 1-argument opcode instance.
+-- I should make these with TH, but that would require having "genName" in scope
+-- which means S would need to be in scope, but then all the S instances
+-- would be orphans, which I don't want either...
+mkOp1 :: (Varable a, Varable out) => String -> a -> S n out
+mkOp1 opname a1 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname (getVarLbl a1)
+  return out
+
+mkOp2 opname a1 a2 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2)
+  return out
+
+mkOp3 opname a1 a2 a3 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3)
+  return out
+
+mkOp4 opname a1 a2 a3 a4 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4)
+  return out
+
+mkOp5 opname a1 a2 a3 a4 a5 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5)
+  return out
+
+mkOp6 opname a1 a2 a3 a4 a5 a6 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6)
+  return out
+
+mkOp7 opname a1 a2 a3 a4 a5 a6 a7 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7)
+  return out
+
+mkOp8 opname a1 a2 a3 a4 a5 a6 a7 a8 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8)
+  return out
+
+mkOp9 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9)
+  return out
+
+mkOp10 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10)
+  return out
+
+mkOp11 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11)
+  return out
+
+mkOp12 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+  return out
+
+mkOp13 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13)
+  return out
+
+mkOp17 opname a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 = do
+  (out, outName) <- genName
+  tellOrc $ printf "%s %s %s\n" outName opname
+    (argCleaner $ appendToList [] a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17)
+  return out
+
+-- | remove null arguments; these appear when a list of arguments is empty.
+argCleaner :: [String] -> String
+argCleaner = intercalate ", " . filter (Prelude.not . null)
+
+mkOp14 = error "mkOp14"
+mkOp15 = error "mkOp15"
+mkOp16 = error "mkOp16"
+mkOp18 = error "mkOp18"
+mkOp19 = error "mkOp19"
+mkOp22 = error "mkOp22"
+mkOp26 = error "mkOp26"
+mkOp32 = error "mkOp32"
+mkOp83 = error "mkOp83"
+mkOp99 = error "mkOp99"
+mkOp51 = error "mkOp51"
+mkOp34 = error "mkOp34"
+mkOp43 = error "mkOp43"
+
+-- ------------------------------------------
+-- ------------------------------------------
+-- sco helpers
+
+-- | A score item.  The "Card" name is old-school
+data Card = Card VarType [String] deriving (Eq, Read, Show)
+
+card2str :: Card -> String
+card2str (Card typ args) = mkChr typ : unwords args ++ "\n"
+
+writeCard :: Card -> S n ()
+writeCard = tellSco . card2str
+
+mkTbl :: Int -> Int -> Int -> [Int] -> Card
+mkTbl nm time sz args = Card T . map show $ nm:time:sz:args
+
+-- |Create a 0-filled f-statement in the score section.
+mkScoreBuf :: Int -> Int -> S n ()
+mkScoreBuf nm sz = writeCard $ mkTbl nm 0 sz [17,0,0]
+
+-- | Holds data on a score item for memoization purposes.
+data CardM = CardM VarType String String deriving (Eq, Ord, Show)
+
+cacheBuf :: String -> Int -> CardM
+cacheBuf lbl = CardM T lbl . show
+
+-- ------------------------------------------
+-- ------------------------------------------
+-- external interface helpers
+
+data BusType = KBus | TblBus Int deriving (Eq, Read, Show)
+
+-- |Specifies details for a Host output described within the language.
+-- First string is a host-specified label.  Second is an auto-generated
+-- name (e.g. tablenum)
+data HostOut = HostOut {
+  busType :: BusType,
+  busLbl  :: String,
+  busName :: String } deriving (Eq, Read, Show)
+
+-- ------------------------------------------
+-- ------------------------------------------
+
+data CacheKey =
+ CKC CardM    -- score cache
+ deriving (Eq, Ord, Show)
+
+type WCache  = M.Map CacheKey CVar
+type GenMap  = M.Map VarType Int
+type ICache = S.Set Int
+data SState  = SState {
+  wcache :: WCache
+ ,genMap :: GenMap
+ ,iCache :: ICache}
+
+type ScoType = TL.Text
+type OrcType = TL.Text
+type HostType = [HostOut]
+
+type WType = (ScoType, OrcType, HostType)
+type RType = (Integer, Integer) -- SR and ksmps
+
+defaultRType = (44100,16)
+
+newtype S n a = S { unS :: RWS RType WType SState a }
+  deriving (Functor, Applicative, Monad, Typeable)
+
+instance MonadFix (S n) where
+  mfix f = S $ mfix (unS . f)
+
+instance MonadState (S n) where
+  type StateType (S n) = SState
+  get = S get
+  put = S . put
+
+instance MonadWriter (S n) where
+  type WriterType (S n) = WType
+  tell   = S . tell
+  listen = S . listen . unS
+  pass   = S . pass . unS
+
+instance MonadReader (S n) where
+  type EnvType (S n) = RType
+  ask   = S ask
+  local f = S . local f . unS
+
+csdHeader =
+  "<CsoundSynthesizer>\n\
+  \<CsOptions>\n\
+  \%s\n\
+  \</CsOptions>\n"
+
+-- -------------------------
+-- helpers for working with states
+
+getGen :: S n GenMap
+getGen = fmap genMap get
+
+putGen :: GenMap -> S n ()
+putGen newstate = modify (\ss -> ss {genMap = newstate})
+
+cache  :: CacheKey -> CVar -> S n ()
+cache key val = do
+  SState cmap gen imap <- get
+  put $ SState (M.insert key val cmap) gen imap
+
+cacheInstr :: Int -> S n ()
+cacheInstr n = modify (\ss -> let ic' = S.insert n (iCache ss) in ss { iCache = ic' })
+
+instrInCache :: Int -> S n Bool
+instrInCache n = do
+  (SState _ _ imap) <- get
+  return $ S.member n imap
+
+tellOrc :: String -> S n ()
+tellOrc s = tell (TL.pack s,mempty, mempty)
+
+tellSco :: String -> S n ()
+tellSco s = tell (mempty,TL.pack s,mempty)
+
+tellHost :: HostOut -> S n ()
+tellHost s = tell (mempty,mempty, [s])
+
+runS :: S n a -> RType -> (a, SState, WType)
+runS e rt = runRWS (unS e) rt (SState M.empty M.empty S.empty)
+
+evalS :: S n a -> RType -> a
+evalS e rt = let (a,_,_) = runS e rt in a
+
+getWritten :: RType -> S n x -> WType
+getWritten rt e = let (_,_,w) = runS e rt in w
+
+-- |Creates a CSD formatted String from args and an x-dsp expression.
+unifyCsd :: [String] -> RType -> S n x -> (TL.Text, [HostOut])
+unifyCsd args r = unifyCsd' args . getWritten r
+
+-- |Creates a CSD file from an argument list and Writer output
+unifyCsd' :: [String] -> WType -> (TL.Text, [HostOut])
+unifyCsd' args (orc, sco, host) = (csd, host)
+ where
+  oH = TL.pack "<CsInstruments>\n"
+  oF = TL.pack "\n</CsInstruments>\n"
+  sH = TL.pack "<CsScore>\n"
+  sF = TL.pack "\ne\n</CsScore>\n</CsoundSynthesizer>\n"
+
+  csd = TL.concat [TL.pack (printf csdHeader (unwords args))
+                  ,oH ,orc ,oF ,sH ,sco ,sF]
+
+class Varable s where
+  genName   :: S n (s, String)
+  getVarLbl :: s -> String
+
+class Varable s => PVar s where
+
+class Varable s => KVar s where
+
+-- |Create a new number of the appropriate type.
+-- This can be made into a name by prepending the type character.
+mkName :: VarType -> S n Int
+mkName typ = do
+  gen <- getGen
+  let num = fromMaybe 1 $ M.lookup typ gen
+  putGen $ M.alter (const $ Just (succ num)) typ gen
+  return num
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- Instances
+
+instance Dsp (S n) where
+  data (ASig (S n)) = S_A CVar
+  data (KSig (S n)) = S_K CVar
+  data (INum (S n)) = S_IN CVar
+  getSr    = fst <$> ask
+  getKsmps = snd <$> ask
+
+instance Constants (S n) where
+  cnst = return . S_IN . Cnst
+  ckig = return . S_K . Cnst
+  csig = return . S_A . Cnst
+
+instance Varable (ASig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup A gen
+        nm  = 'a' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) A gen) imap
+    return (S_A $ CVar nm, nm)
+  getVarLbl (S_A c) = getLbl c
+
+instance PVar (ASig (S n)) where
+
+instance Varable (KSig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup K gen
+        nm  = 'k' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) K gen) imap
+    return (S_K $ CVar nm, nm)
+  getVarLbl (S_K c) = getLbl c
+
+instance PVar (KSig (S n)) where
+instance KVar (KSig (S n)) where
+
+instance Varable (INum (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup I gen
+        nm  = 'i' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) I gen) imap
+    return (S_IN $ CVar nm, nm)
+  getVarLbl (S_IN c) = getLbl c
+
+instance Varable () where
+  genName            = return ((), "")
+  getVarLbl _        = "()"
+
+instance Varable String where
+  genName = error "Can't call 'genName' on String directly"
+  getVarLbl s = '"' : s ++ "\""
+
+instance Varable (VString (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup St gen
+        nm  = 'S' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) St gen) imap
+    return (S_VS $ CVar nm, nm)
+  getVarLbl (S_VS c) = getLbl c
+
+instance KVar (VString (S n)) where
+
+instance (Varable a, Varable b) => Varable (a,b) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    return ((o1,o2), nm1 ++ ", " ++ nm2)
+  getVarLbl (a,b)      = getVarLbl a ++ ", " ++ getVarLbl b
+
+instance (Varable a, Varable b, Varable c) =>
+ Varable (a,b,c) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    (o3,nm3) <- genName
+    return ((o1,o2,o3), intercalate ", " [nm1, nm2, nm3])
+  getVarLbl (a,b,c) =
+    intercalate ", " [getVarLbl a, getVarLbl b,getVarLbl c]
+
+instance (Varable a, Varable b, Varable c, Varable d) => Varable (a,b,c,d) where
+  genName = do
+    (o1,nm1) <- genName
+    (o2,nm2) <- genName
+    (o3,nm3) <- genName
+    (o4,nm4) <- genName
+    return ((o1,o2,o3,o4), intercalate ", " [nm1, nm2, nm3, nm4])
+  getVarLbl (a,b,c,d) =
+    intercalate ", " [getVarLbl a, getVarLbl b,getVarLbl c, getVarLbl d]
+
+instance Varable a => Varable [a] where
+  genName             = error "Can't generate names for arbitrary lists"
+  getVarLbl           = intercalate ", " . map getVarLbl
+
+instance forall d a. (Varable a, Nat d) => Varable (TList d a) where
+  genName = do
+    outss <- replicateM (toInt (undefined :: d)) genName
+    return (TList $ map fst outss, intercalate ", " $ map snd outss)
+  getVarLbl           = intercalate ", " . map getVarLbl . unTList
+
+instance KVar (INum (S n)) where
+
+instance PVS (S n) where
+  data FSig (S n) = S_FSig CVar
+
+instance Varable (FSig (S n)) where
+  genName = do
+    SState omap gen imap <- get
+    let num = fromMaybe 1 $ M.lookup F gen
+        nm  = 'f' : show num
+    put $ SState omap (M.alter (const $ Just (succ num)) F gen) imap
+    return (S_FSig $ CVar nm, nm)
+  getVarLbl (S_FSig c) = getLbl c
+
+-- | need this to directly use numeric literals as arguments.
+instance Varable Double where
+  genName   = error "genName shouldn't be called with Doubles"
+  getVarLbl = show
+
+instance StringVar (S n) where
+  data VString (S n) = S_VS CVar
+
+-- ---------------------------------
+-- ---------------------------------
+-- The csound class
+instance CsoundClass (S n) where
+  nchnls n   = tellOrc (printf "nchnls = %i\n" n) >> return n
+  set0dbfs n = tellOrc (printf "0dbfs = %f\n" n) >> return n
+
+-- ---------------------------------
+-- ---------------------------------
+-- Numeric support for signals
+instance Show (ASig (S n)) where
+  show (S_A s) = show s
+
+instance Eq (ASig (S n)) where
+  (S_A a) == (S_A b) = a == b
+
+instance Num (ASig (S n)) where
+  (S_A a) + (S_A b) = S_A . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_A a) - (S_A b) = S_A . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_A a) * (S_A b) = S_A . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (ASig (S n))"
+  signum      = error "signum called on (ASig (S n))"
+  fromInteger = S_A . Cnst . fromInteger
+
+instance Fractional (ASig (S n)) where
+  (S_A a) / (S_A b) = S_A . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_A . Cnst . fromRational
+
+instance Show (KSig (S n)) where
+  show (S_K s) = show s
+
+instance Eq (KSig (S n)) where
+  (S_K a) == (S_K b) = a == b
+
+instance Num (KSig (S n)) where
+  (S_K a) + (S_K b) = S_K . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_K a) - (S_K b) = S_K . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_K a) * (S_K b) = S_K . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (KSig (S n))"
+  signum      = error "signum called on (KSig (S n))"
+  fromInteger = S_K . Cnst . fromInteger
+
+instance Fractional (KSig (S n)) where
+  (S_K a) / (S_K b) = S_K . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_K . Cnst . fromRational
+
+instance Show (INum (S n)) where
+  show (S_IN s) = show s
+
+instance Eq (INum (S n)) where
+  (S_IN a) == (S_IN b) = a == b
+
+instance Num (INum (S n)) where
+  (S_IN (Cnst a)) + (S_IN (Cnst b)) = S_IN $ Cnst (a+b)
+  (S_IN a) + (S_IN b) = S_IN . CVar $ printf "(%s + %s)" (getLbl a) (getLbl b)
+  (S_IN (Cnst a)) - (S_IN (Cnst b)) = S_IN $ Cnst (a-b)
+  (S_IN a) - (S_IN b) = S_IN . CVar $ printf "(%s - %s)" (getLbl a) (getLbl b)
+  (S_IN (Cnst a)) * (S_IN (Cnst b)) = S_IN $ Cnst (a*b)
+  (S_IN a) * (S_IN b) = S_IN . CVar $ printf "(%s * %s)" (getLbl a) (getLbl b)
+  abs _       = error "abs called on (INum (S n))"
+  signum      = error "signum called on (INum (S n))"
+  fromInteger = S_IN . Cnst . fromInteger
+
+instance Fractional (INum (S n)) where
+  (S_IN (Cnst a)) / (S_IN (Cnst b)) = S_IN . Cnst $ a/b
+  (S_IN a) / (S_IN b) = S_IN . CVar $ printf "(%s / %s)" (getLbl a) (getLbl b)
+  fromRational = S_IN . Cnst . fromRational
+
+instance Show s => Show ((S n) s) where
+  show s = show $ evalS s defaultRType
+
+instance Eq e => Eq ((S n) e) where
+  e1 == e2 = evalS ((==) <$> e1 <*> e2) defaultRType
+
+instance Num e => Num ((S n) e) where
+  e1 + e2     = (+) <$> e1 <*> e2
+  e1 - e2     = (-) <$> e1 <*> e2
+  e1 * e2     = (*) <$> e1 <*> e2
+  abs         = fmap Prelude.abs
+  signum      = fmap signum
+  fromInteger = pure . fromInteger
+
+instance Fractional e => Fractional ((S n) e) where
+  e1 / e2 = (/) <$> e1 <*> e2
+  recip   = fmap recip
+  fromRational = pure . fromRational
+
+-- ---------------------------------
+-- ---------------------------------
+-- core language extensions
+
+-- | supports assignment
+instance Varable a => Asn (S n) a where
+  asn = mkOp1 "="
+
+-- | supports output
+instance Out (S n) where
+  out = tellOrc . printf "       out %s\n" . getVarLbl
+  outs a1 a2 = do
+    (tellOrc $ printf "       outs %s, %s\n" (getVarLbl a1) (getVarLbl a2))
+  outq a1 a2 a3 a4 = do
+    (tellOrc $ printf "       outs %s, %s, %s, %s\n"
+      (getVarLbl a1) (getVarLbl a2) (getVarLbl a3) (getVarLbl a4))
+  outo a1 a2 a3 a4 a5 a6 a7 a8 = do
+    (tellOrc $ printf "       outs %s, %s, %s, %s, %s, %s, %s, %s\n"
+      (getVarLbl a1) (getVarLbl a2) (getVarLbl a3) (getVarLbl a4)
+      (getVarLbl a5) (getVarLbl a6) (getVarLbl a7) (getVarLbl a8))
+
+-- ---------------------------------
+-- ---------------------------------
+-- Buffers (function tables)
+
+-- | creation of buffers
+instance Buffer (S n) where
+  type Buf (S n) = INum (S n)
+  emptyBuffer sz = do
+    bufNum <- mkName T
+    mkScoreBuf bufNum sz
+    return $ fromIntegral bufNum
+
+instance (Varable a) => BufferR (S n) a a where
+  lookupAt = flip (mkOp2 "tablei")
+
+-- | creation of host-variable buffers
+instance VBuf (S n) where
+  vbuf lbl sz = do
+    (SState cmap gen imap) <- get
+    case M.lookup (CKC $ cacheBuf lbl sz) cmap of
+      Just nm -> return $ S_IN nm
+      Nothing -> do
+        bufNum <- mkName T
+        mkScoreBuf bufNum sz
+        tellHost . HostOut (TblBus sz) lbl $ show bufNum
+        let res = Cnst $ fromIntegral bufNum
+        cache (CKC $ cacheBuf lbl sz) res
+        return $ S_IN res
+
+-- ---------------------------------
+-- ---------------------------------
+-- Instruments
+
+instance (Nat m, Nat n, Show n, m :>=: n) => NumArgs S m n where
+  getArg n = return . S_IN . CVar $ 'p': show n
+
+-- | Labelled blocks (basic instrument creation)
+instance LblBlock (S n) where
+  type ArgTag (S n) = n
+  type ArgTyp (S n) = Either String Double
+  data Block (S n) = Instr Int
+  lblBlock num e = do
+    isCached <- instrInCache num
+    when (Prelude.not isCached) $ do
+      tellOrc (printf "instr %d\n" num) >> e >> tellOrc "endin\n\n"
+      clearBlockData
+      cacheInstr num
+    return $ Instr num
+  runBlock = runBlock'
+
+getArgVal :: Either String Double -> String
+getArgVal = either show show
+
+makeInstrument :: S n () -> S n (Block (S n))
+makeInstrument e = do
+  SState _ _ imap <- get
+  maybe (lblBlock 1 e) (\(n, _) -> lblBlock (n+1) e) $ S.maxView imap
+
+-- | After labelling a block (csound instr), we need to clear the opcode
+-- caches, otherwise code could be invalidly shared between instruments.
+-- We can clear the name generator too (except for table nums).
+clearBlockData :: S n ()
+clearBlockData = do
+  (SState cmap genmap imap) <- get
+  let cmap' = M.mapMaybeWithKey cmf cmap
+      genmap' = M.mapMaybeWithKey gmf genmap
+  put $ SState cmap' genmap' imap
+ where
+  cmf k       v = Just v
+  gmf T n       = Just n
+  gmf _ _       = Nothing
+
+-- | Runs a block (instr).
+runBlock' ::
+  Block (S n)
+  -> Double
+  -> Double
+  -> TList m (Either String Double)
+  -> S n ()
+runBlock' (Instr blkLbl) startIn dur args =
+  writeCard . Card IC $ [show blkLbl, show startIn, show dur]
+                        ++ map getArgVal (unTList args)
+
+-- runBlock' should have the constraint (n :>=: m), but that doesn't work
+-- because the constraint isn't passed through the LblBlock class.
+-- It's not a problem because the constraint is enforced by "getArg", so
+-- only valid arguments will be used.
+
+-- | Writes the header data
+writeHeader :: Int -> Double -> S n ()
+writeHeader nc dbfs = do
+  (sr,ksmps) <- ask
+  setSR sr
+  setKSmps ksmps
+  nchnls nc
+  set0dbfs dbfs
+  return ()
+
+setSR n       = tellOrc (printf "sr = %i\n" n) >> return n
+setKSmps n    = tellOrc (printf "ksmps = %i\n" n) >> return n
+
+-- ---------------------------------
+-- ---------------------------------
+-- phasor
+instance Phasor (S n) (KSig (S n)) (KSig (S n)) where
+  phasor = mkOp1 "phasor"
+
+instance (Varable a) => Phasor (S n) (ASig (S n)) a where
+  phasor = mkOp1 "phasor"
+
+-- oscillators
+
+-- | Supports table-lookup oscillators
+instance (Varable a, Varable b, PVar out) => Oscil (S n) out a b where
+  oscil   = mkOp3 "oscil3"
+  oscil'  = mkOp4 "oscil3"
+
+-- ---------------------------------
+-- ---------------------------------
+-- delays
+instance Delay (S n) where
+  delaySamp = mkOp1 "delay1"
+  vdelay3   = mkOp3 "vdelay3"
+
+-- delay networks
+instance DelayNet (S n) where
+  type DelayN (S n) = SDelay n
+  runDelay  = runDelay'
+  tapA      = tap'
+  tapK      = tap'
+  tapI      = tap'
+
+newtype SDelay n a = SDelay { unDelay :: S n a }
+  deriving (Functor)
+
+instance Applicative (SDelay n) where
+  pure = SDelay . pure
+  (SDelay a) <*> (SDelay b) = SDelay (a <*> b)
+
+runDelay' :: INum (S n) -> ASig (S n) -> SDelay n a -> S n a
+runDelay' maxdel insig dl = do
+  tellOrc $ printf "aNull delayr %s\n" (getVarLbl maxdel)
+  v <- unDelay dl
+  tellOrc $ printf "    delayw %s\n" (getVarLbl insig)
+  return v
+
+tap' :: Varable b => b -> SDelay n (ASig (S n))
+tap' dtime = SDelay $ mkOp1 "deltap3" dtime
+
+
+-- ---------------------------------
+-- ---------------------------------
+-- test instruments
+
+-- | very basic block
+t1 = do
+  v <- csig 1000
+  outs v v
+
+-- | allocate a "variable buffer" (i.e. host-updated buffer)
+t2 = do
+  buf <- vbuf "a buffer" 8192
+  so <- oscil 1000 440 buf
+  outs so so
+
+-- | delay networks
+
+-- | simple delay with constant signal
+t3 = do
+  so <- runDelay 1 1000 (tapK 1)
+  outs so so
+
+t4 = do
+  buf <- vbuf "a buffer" 8192
+  so <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  dl <- runDelay 2 so d
+  sig <- asn $ so + dl
+  outs sig sig
+
+t5 = do
+  buf <- vbuf "a buffer" 8192
+  so  <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  rec dl <- runDelay 2 (so+dl) d
+  sig <- asn $ so + dl
+  outs sig sig
+
+t5' = do
+  buf <- vbuf "a buffer" 8192
+  so  <- oscil 1000 440 buf
+  let d = (\d1 d2 -> 0.5*d1+0.25*d2) <$> tapI 1 <*> tapI 2
+  rec dl <- runDelay 2 (so + 0.1*dl) d
+  sig <- asn $ so + dl
+  outs sig sig
+
+-- | additive synthesis.  Shared buffer, uses the Num instance for signals.
+t6 = do
+  so  <- zipWithM (\fq buf -> oscil 1000 (fq*110) buf) [4..] (replicate 20 1)
+  so' <- asn $ sum so
+  outs so' so'
+
+-- | using fold to make an oscil stack.  Note that emptyBuffer is *not*
+-- memoized.
+t8 = do
+  buf <- emptyBuffer 8192
+  stack <- foldM (\a f -> f a) (40)
+                       (replicate 4 (\fq -> oscil 1000 fq buf))
+  outs stack stack
+
+-- | It's necessary to use monadic sequencing (here implicit in makeInstruments)
+-- to chain instruments together
+all1 = mapM makeInstrument [t1,t2, t3, t4, t5', t6, t8]
diff --git a/tools/foo.csd b/tools/foo.csd
new file mode 100644
--- /dev/null
+++ b/tools/foo.csd
@@ -0,0 +1,24 @@
+<CsoundSynthesizer>
+<CsOptions>
+-d
+</CsOptions>
+<CsInstruments>
+
+    sr = 44100
+    ksmps = 1
+    nchnls = 2
+    0dbfs  = 1
+
+
+instr 1
+a1 oscili 0.8, 440, 1
+  outs a1, a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 1024 10 1
+i 1 0 0.5
+e
+</CsScore>
+</CsoundSynthesizer>
diff --git a/tools/gen_Csound_Classes.sh b/tools/gen_Csound_Classes.sh
new file mode 100644
--- /dev/null
+++ b/tools/gen_Csound_Classes.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+# move the Csound classes to Language/XDsp/Semantics/CsoundExt/All.hs
+
+runghc "-hide-package mtl" "-framework CoreFoundation" mkClass.hs
+cp allOps.txt ../src/Language/XDsp/Semantics/CsoundExt/All.hs
diff --git a/tools/gen_Csound_backend.sh b/tools/gen_Csound_backend.sh
new file mode 100644
--- /dev/null
+++ b/tools/gen_Csound_backend.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# combine the Csound Template file and the auto-generated instances, then
+# move them to Language/XDsp/Implementations/Csound.hs
+
+runghc "-hide-package mtl" "-framework CoreFoundation" mkOp.hs
+cp CsoundImplTemplate.hs ../src/Language/XDsp/Implementations/Csound.hs
+cat csdInstances.txt >> ../src/Language/XDsp/Implementations/Csound.hs
diff --git a/tools/mkClass.hs b/tools/mkClass.hs
new file mode 100644
--- /dev/null
+++ b/tools/mkClass.hs
@@ -0,0 +1,94 @@
+import           CsMaps
+import           CsParser
+
+import           Sound.Csound
+import           Control.Arrow ((***))
+import           Control.Applicative ((*>), (<*))
+import           Control.Monad.Error
+import           Control.Monad.State
+import           Control.Monad.Writer
+import qualified Data.Map as M
+import           Data.Maybe
+import qualified Data.Set as S
+import           Text.Printf
+import           Data.Char
+import           Data.List (intercalate)
+
+-- create a class description from OpcodeListEntry
+
+-- | the opcodelist has duplicate entries for overloaded opcodes.
+-- merge them to single polymorphic variants, collecting information
+-- on errors
+mergeOpcodeList :: [OpcodeListEntry] -> ([String], [OpcodeListEntry])
+mergeOpcodeList = fmap M.elems . foldr fn ([],M.empty)
+ where
+  fn ocl (errs,mp) =
+   let onm = opcodeName ocl
+   in case M.lookup onm mp of
+        Nothing   -> (errs,M.insert onm ocl mp)
+        Just prev -> either (\err' -> (err':errs,mp))
+                            (\n' -> (errs,M.insert onm n' mp))
+                            (mixOcl ocl prev)
+
+
+mixOcl :: OpcodeListEntry -> OpcodeListEntry -> Either String OpcodeListEntry
+mixOcl a b | opcodeName a == opcodeName b = do
+  los <- zipWithM mixLO (ouTypes a) (ouTypes b)
+  return $ OpcodeListEntry (opcodeName a) los (zipWith mixL (inTypes a) (inTypes b))
+mixOcl a b = throwError "mixOcl called with non-matching entries"
+
+type SpCtx = String -- stub
+
+cap :: String -> String
+cap []     = []
+cap (a:as) = toUpper a:as
+
+unCap :: String -> String
+unCap []     = []
+unCap (a:as) = toLower a:as
+
+mkClass :: SpCtx -> OpcodeListEntry -> Writer [String] String
+mkClass ctx ole = case (runParseI (inTypes ole), fmap ctxtRepr $ parseOutarg (ouTypes ole)) of
+  (Right i, Right o) -> return $ topline i o ++ mainline i o ++ oline i o
+  (Left ie, Left oe) -> tell [opc,ie,oe] >> return ""
+  (Left ie, _)       -> tell [opc,ie] >> return ""
+  (_,       Left oe) -> tell [opc,oe] >> return ""
+ where
+  opc = let n' = unCap $ opcodeName ole
+        in fromMaybe n' $ M.lookup n' invalidNameMap
+  topline (invars,inargs,_,reqNum) (hasOut,outarg) =
+    printf "class %s %s repr %s%s where\n"
+           ("(" ++ intercalate ", " (ctx:addCtxt (opcodeName ole)) ++ ") =>")
+           ("Cs" ++ cap opc)
+           (getCtxt hasOut)
+           (intercalate " " $ map (:[]) invars)
+  mainline (invars,inargs,_,reqNum) (hasOut,outarg) =
+    printf "  %s ::\n    %s\n"
+           opc
+           (intercalate "\n    -> " $ (maybe id take reqNum inargs) ++ [outarg])
+  oline (invars,inargs,_,reqNum) (hasOut,outarg) =
+    maybe "" (const $ printf "  %s' :: %s\n"
+                             opc
+                             (intercalate "\n    -> " $ inargs ++ [outarg]))
+             reqNum
+
+allOps = do
+  ops <- runCsound (compile "-d foo.csd" >> newOpcodeList <* cleanup)
+  return $ either (error . show) id ops
+
+writeOut fn ctx ops = do
+  writeFile fn . intercalate "\n\n" $
+    filter (not .null) (exts:mkModule allModName:vals)
+  writeFile ("err_" ++ fn) $ intercalate "\n\n" (errs ++ errs1)
+ where
+  (errs1, ops') = mergeOpcodeList $ filter (not . flip S.member noReuseSet . opcodeName) ops
+  (vals,errs) = runWriter $ mapM (mkClass ctx) ops'
+
+exts = "{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts #-}"
+
+mkModule modname =
+  "module " ++ modname ++ " where\n\nimport Language.XDsp.Semantics.Core\nimport Language.XDsp.Semantics.CsoundExt.Core\nimport Language.XDsp.Semantics.Extras\nimport Language.XDsp.Semantics.BasicExtensions"
+
+allModName = "Language.XDsp.Semantics.CsoundExt.All"
+
+main = allOps >>= writeOut "allOps.txt" "CsoundClass repr"
diff --git a/tools/mkOp.hs b/tools/mkOp.hs
new file mode 100644
--- /dev/null
+++ b/tools/mkOp.hs
@@ -0,0 +1,116 @@
+module Main (main) where
+
+import           CsMaps
+import           CsParser
+
+import           Sound.Csound
+import           Control.Arrow ((***), first)
+import           Control.Applicative ((*>), (<*))
+import           Control.Monad.Error
+import           Control.Monad.State
+import           Control.Monad.Writer
+import qualified Data.Map as M
+import qualified Data.Set as S
+import           Data.Maybe
+import           Text.Printf
+import           Data.Char
+import           Data.Either
+import           Data.List (intercalate)
+
+foldM1 f [] = error "foldM1 called on empty list"
+foldM1 f (x:xs) = foldM f x xs
+
+fromRight (Right val) = val
+fromRight n           = error $ "fromRight called on Left" ++ show n
+
+-- scheme for handling instances:
+-- group all opcodes by name and determine var positions
+-- group opcodes by output (a,k,i, other)
+-- merge each group, separate instance for each output type
+-- k-inputs can be k- or i-, use the KVar class
+
+-- | partition opcode list into a list of
+--  (name, fully-merged opcode, opcodes merged by outarg)
+partitionOutarg :: [OpcodeListEntry]
+  -> ([String], [(String, OpcodeListEntry, [(OType,OpcodeListEntry)])])
+partitionOutarg = partitionEithers . map mungeTup . M.assocs . foldr f M.empty
+ where
+  -- make map of (name) to list of opcodes
+  f ocl = M.insertWith (++) (opcodeName ocl) [ocl]
+  g ocl = M.insertWith (++) (either (const SS) id . parseOutarg $ ouTypes ocl) [ocl]
+  mungeTup (nm, ocls) = do
+    fullMerge <- foldM1 mixOcl ocls
+    let (chk,oMap) = M.mapEither (foldM1 mixOcl) $ foldr g M.empty ocls
+    when (not $ M.null chk) (error "chk map isn't empty, shouldn't happen")
+    return (nm, fullMerge, M.assocs oMap)
+
+mixOcl :: OpcodeListEntry -> OpcodeListEntry -> Either String OpcodeListEntry
+mixOcl a b | opcodeName a == opcodeName b = do
+  los <- zipWithM mixLO (ouTypes a) (ouTypes b)
+  return $ OpcodeListEntry (opcodeName a) los (zipWith mixL (inTypes a) (inTypes b))
+mixOcl a b = throwError "mixOcl called with non-matching entries"
+
+type SpCtx = String -- stub
+
+cap :: String -> String
+cap []     = []
+cap (a:as) = toUpper a:as
+
+unCap :: String -> String
+unCap []     = []
+unCap (a:as) = toLower a:as
+
+
+-- ops' :: (Name, MergedOp, [(OType, MergedOp)])
+-- for each MergedOp, get the tyvar positions
+-- then write an instance for each OType, filling in the tyvars
+
+mkInstance :: String -> OpcodeListEntry -> (OType, OpcodeListEntry)
+  -> Writer [String] String
+mkInstance _ flmrg (otype, ole) = 
+ case (getInArgTyVars (inTypes flmrg), parseOutarg (ouTypes flmrg)) of
+   (Right i, Right o) -> return $ topline i o ++ mainline i o ++ oline i o
+   (Left ie, Left oe) -> tell [opc,ie,oe] >> return ""
+   (Left ie, _)       -> tell [opc,ie] >> return ""
+   (_,       Left oe) -> tell [opc,oe] >> return ""
+ where
+  opc = let n' = unCap $ opcodeName ole
+        in fromMaybe n' $ M.lookup n' invalidNameMap
+  lookupInTyp (pos,vnm) = either
+                          (\nm' -> Left $ nm' ++ [vnm])
+                          (Right)
+                          (inArgInstanceInfo $ (inTypes ole) !! pos)
+  tyVars (pos,vnm) = either (const [vnm])
+                            id
+                            (inArgInstanceInfo $ (inTypes ole) !! pos)
+  -- inargs :: [(VarPos, VarName)]
+  topline (tnum,inargs,reqNum) fmOt =
+    printf "instance %s %s (S n) %s where\n"
+           (if null allHd then ""
+             else printf "(%s) =>" (intercalate ", " allHd))
+           (qualifyName $ "Cs" ++ cap opc)
+           allDecl
+     where
+       (inHd, _) = partitionEithers $ map lookupInTyp inargs
+       -- if the instance outtype needs a context, provide it
+       allHd = maybe inHd ((:inHd) . fst) (instrCtx otype)
+       inDecls = map tyVars inargs
+       allDecl = unwords $ if oHasCtxt fmOt then (monoCtxt otype:inDecls) else inDecls
+  mainline (tnum,inargs,reqNum) _ =
+    printf "  %s = mkOp%d \"%s\"\n" opc (fromMaybe tnum reqNum) opc
+  oline (tnum,inargs,reqNum) _ =
+    maybe "" (const $ printf "  %s' = mkOp%d \"%s\"\n" opc tnum opc) reqNum
+
+allOps = do
+  ops <- runCsound (compile "-d foo.csd" >> newOpcodeList <* cleanup)
+  return $ either (error . show) id ops
+
+writeOut fn ctx ops = do
+  writeFile fn $ intercalate "\n\n" . filter (not . null) $ concat vals
+  writeFile ("err_" ++ fn) $ intercalate "\n\n" (errs ++ errs1)
+ where
+  -- ops' :: [ (Name, MergedOp, [(OType, MergedOp)]) ]
+  (errs1, ops') = partitionOutarg $ filter (not . flip S.member noReuseSet . opcodeName) ops
+  (vals,errs) = runWriter $ mapM (\(a,b,c) -> mapM (mkInstance a b) c) ops'
+
+main = allOps >>= writeOut "csdInstances.txt" "CsoundClass repr =>"
diff --git a/x-dsp.cabal b/x-dsp.cabal
new file mode 100644
--- /dev/null
+++ b/x-dsp.cabal
@@ -0,0 +1,46 @@
+Name:                x-dsp
+Version:             0.2
+Synopsis:            A embedded DSL for manipulating DSP languages in Haskell
+Description:         Provides a tagless-final language family for manipulating
+                     audio programming languages (e.g. Csound, Supercollider).
+                     A CSound backend is provided, however the language is
+                     completely open so others can be added by users.
+Homepage:            http://jwlato.webfactional.com/haskell/x-dsp
+License:             GPL-3
+License-file:        LICENSE
+Author:              John W. Lato
+Maintainer:          jwlato@gmail.com
+Category:            Sound, Music
+Build-type:          Simple
+Cabal-version:       >=1.6
+
+extra-source-files:
+  README, tools/CsMaps.hs, tools/CsParser.hs, tools/CsoundImplTemplate.hs,
+  tools/foo.csd, tools/gen_Csound_Classes.sh, tools/gen_Csound_backend.sh,
+  tools/mkClass.hs, tools/mkOp.hs
+
+Library
+  Hs-Source-Dirs:    src
+  Exposed-modules:   Language.XDsp.Semantics
+                     Language.XDsp.Semantics.BasicExtensions
+                     Language.XDsp.Semantics.Core
+                     Language.XDsp.Semantics.CsoundExt
+                     Language.XDsp.Semantics.CsoundExt.All
+                     Language.XDsp.Semantics.CsoundExt.Core
+                     Language.XDsp.Semantics.Extras
+                     Language.XDsp.Semantics.Extras.Delay
+                     Language.XDsp.Semantics.Extras.FSig
+                     Language.XDsp.Implementations.Csound
+                     Language.XDsp.Implementations.HaskellNative
+  Build-depends:     base             >= 3   && < 5
+                    ,array            >= 0.2 && < 0.4
+                    ,bytestring       >= 0.9 && < 0.10
+                    ,containers       >= 0.2 && < 0.5
+                    ,monads-tf        >= 0.1 && < 0.2
+                    ,text             >= 0.7 && < 0.13
+                    ,transformers     >= 0.2 && < 0.3
+                    ,type-level       >= 0.2 && < 0.3
+
+source-repository head
+  type:     darcs
+  location: http://www.tiresiaspress.us/haskell/x-dsp
