CSCI 360
Programming Languages


11:25am-12:15pm (A4)


MC Reynolds 110


Dr. Brent Yorgey
(501) 450-1377
Office Hours


Although you will probably never need to implement your own full-blown programming language from scratch, thinking in terms of language design is a powerful problem solving technique. In this hands-on course you will develop programming language design and implementation skills through a number of examples, using the Haskell programming languages. Topics to be covered include parsing, type checking, interpreters, abstraction, compositionality, and embedded domain-specific languages. As a final project, each student creates and implements a domain-specific language of their own design.

Learning Goals

Upon completing this course, you will be able to:

Click below to join our virtual classroom!


Assignment submission form

Date Virtual? Lectures and Modules Links Notes
W 20 Jan   CSCI 360 Introduction    
F 22 Jan V Introduction to modules and    
    01: Introduction to Haskell [lhs]    
M 25 Jan V 01: Introduction to Haskell [lhs]    
W 27 Jan V 01: Introduction to Haskell [lhs]    
F 29 Jan IP Haskell in context [in-class code]    
M 1 Feb V 02: Algebraic data types and pattern matching [lhs]   Module 1 due
W 3 Feb IP Algebraic data types [in-class code]    
F 5 Feb   No class    
M 8 Feb V 03: Polymorphism and lists [lhs]   Module 2 due
W 10 Feb V 04a: Syntax [lhs]    
F 12 Feb V* Programming language components and pipeline [chalkboard drawing]   Module 3 due
M 15 Feb V 04b: Semantics [lhs]   Module 4a due
W 17 Feb V 05: The Arith language: pretty-printing [lhs]    
F 19 Feb V* Pretty-printing and precedence [in-class code]   Module 4b due
    Extra module (optional): 06: The Arith language: parsing [lhs]    
M 22 Feb V 07: Parser combinators [lhs, Parsing.hs]    
W 24 Feb V 07: Parser combinators [lhs]   Module 5 due
F 26 Feb V* Parser combinators and Domain-Specific Languages [lhs]    
M 1 Mar V 08: Variables [lhs, Parsing.hs]   Module 7 due
    Parser combinator example    
W 3 Mar V 08: Variables [lhs]    
F 5 Mar IP Type classes    
M 8 Mar V 08: Variables [lhs]    
W 10 Mar V 09: Dynamic type checking [lhs]    
F 12 Mar IP Type systems   Module 8 due
M 15 Mar V 10: Static type checking [lhs]    
W 17 Mar V 10: Static type checking [lhs]   Module 9 due
F 19 Mar IP A simple language with functions in-class code    
M 22 Mar V Module catch-up (optional)    
W 24 Mar   No class    
F 26 Mar IP Typechecking functions in-class code   Module 10 due
        Project 2 suggested due date
M 29 Mar V 11: IMP [lhs]    
W 31 Mar V 11: IMP [lhs]    
F 2 Apr IP Extending IMP with for loops    
M 5 Apr   No class   Module 11 due
W 7 Apr IP Intro to Quilt language    
F 9 Apr V Haskell install party    
M 12 Apr V 12: Quilt EDSL [lhs, quilt.cabal, stack.yaml]    
    Module 12 intro    
W 14 Apr V 12: Quilt EDSL [lhs, quilt.cabal, stack.yaml]    
F 16 Apr IP Haskell EDSL example: diagrams    
M 19 Apr V 13: Quilt Deep EDSL [lhs, quilt.cabal, stack.yaml]    
W 21 Apr IP Language family tree, pandas as EDSL    
F 23 Apr   No class    
M 26 Apr V Project/module work day    
W 28 Apr V Project/module work day    
F 30 Apr IP Disco    
M 10 May V Final project presentations   8:30-11:30am


Assignment submission form

Your learning in the course will primarily take place through modules which will be done during class time in teams of 2 or 3. Each module will guide you through a learning process on a particular topic. Modules not completed during class time should be completed with your group outside of class.

To be eligible for credit, a reasonable attempt at a completed module must be turned in before the second class meeting after the last day the module is worked on in class (for example, if Monday and Wednesday are spent working on a module in class, the completed module must be turned in before class the following Monday). If a first submission of a module is not made by this deadline, you may still request feedback on a later submission of the module, but it will not receive any credit.

A submitted module will either receive credit or no credit based on whether it is complete and correct. Submitted modules will receive a credit/no credit grade and feedback within two business days of submission. If a module is submitted before the deadline but receives no credit, you may continue to resubmit it any number of times based on feedback until it receives credit. There is no deadline or penalty for module resubmissions.


Assignment submission form

There will be four three projects available to complete throughout the semester. These projects will give you a chance to demonstrate and apply the things you have learned through the modules.

Project Suggested start date Suggested due date
Arith compiler Feb 18 March 3
Calculator March 5 March 26
Final project April 12 May 10


This course uses specifications grading. Your final grade in the course is based on the number of modules and projects satisfactorily completed, and the level of the completed projects. Each row in the table below shows what you must accomplish in order to earn a certain letter grade in the course. For example, to earn a B, you must complete at least 11 modules, one project at Level 1 (or higher), two one project at Level 2 (or higher), and at least one project at Level 3.

Grade Modules L1 L2 L3
D 6 2    
C 8 1 1  
B 10 1 1 1
A 12   1 2


Coming soon!


Although you and I play different roles in the course, we both have your learning as a common goal. There are things I expect from you as a student in the course, but there are also things you can expect of me as the course instructor and facilitator.

If I am not fulfilling my responsibilities outlined below, you are welcome (and encouraged!) to call me out, perhaps via the anonymous feedback form. I will also initiate a conversation if you are not fulfilling yours. However, none of us will meet all of the expectations perfectly—me included!—so it’s also important that we have grace and patience with one another.

What I expect from you What you can expect from me
  • Check your email and Teams for occasional course announcements.
  • Let me know via email or Teams message if you will need to miss class for some reason.
  • Let me know as soon as possible if you feel you are struggling, would like extra help, or have something going on that will affect your engagement in the course or your ability to fulfill your responsibilities.
  • Clearly communicate expectations, assignment details and dates, and grading standards.
  • Return grades and feedback on submitted work within two business days of submission.
  • Respond to emails within 24 hours.
  • Come prepared to fully engage in class meetings, with distractions minimized, to the best of your ability.
  • Spend time outside of class actively practicing unfamiliar or shaky concepts or skills (not just reading over notes).
  • Have a concrete plan for how we will spend each class meeting, prepared to lead you through the plan.
  • Complete all modules and projects myself, to help ensure they are reasonable and don't hold any unintended surprises.
  • Make myself available to meet outside of class, and give you my full attention during a meeting.
  • Be committed to your learning, open to feedback and willing to respond in substantive ways to your suggestions or concerns.


Attendance in this class is not required as part of your grade. However, if you have been working in a group and are not planning to attend class, it is courteous to let me and your group members know so that we can reassign groups if necessary.

If you have chosen to attend class in person, you are expected to do so consistently; you may not decide to attend remotely some days just because you feel like it. However, there are legitimate reasons for attending remotely, such as feeling ill or travelling unavoidably.


If you have a documented disability or some other reason that you cannot meet the above expectations, and/or your learning would be best served by a modification to the usual course policies, I would be happy to work with you—please get in touch (via Teams or email)! The course policies are just a means to an end; I don’t care about the policies per se but I do care about you and your learning.

It is the policy of Hendrix College to accommodate students with disabilities, pursuant to federal and state law. Students should contact Julie Brown in the Office of Academic Success (505.2954; to begin the accommodation process. Any student seeking accommodation in relation to a recognized disability should inform the instructor at the beginning of the course.

Diversity and Inclusion

Hendrix College values a diverse learning environment as outlined in the College’s Statement on Diversity. All members of this community are expected to contribute to a respectful, welcoming, and inclusive environment for every other member of the community. If you believe you have been the subject of discrimination please contact Dean Mike Leblanc at or 501-450-1222 or the Title IX Coordinator Allison Vetter at titleix@hendrix.eduor 501-505-2901. If you have ideas for improving the inclusivity of the classroom experience please feel free to contact me. For more information on Hendrix non-discrimination policies, visit

Mental and Physical Health

Hendrix recognizes that many students face mental and/or physical health challenges. If your health status will impact attendance or assignments, please communicate with me as soon as possible. If you would like to implement academic accommodations, contact Julie Brown in the office of Academic Success ( To maintain optimal health, please make use of free campus resources like the Hendrix Medical Clinic or Counseling Services (501.450.1448). Your health is important, and I care more about your health and well-being than I do about this class!