Type Driven Development with Idris

Type Driven Development with Idris Author Edwin Brady
ISBN-10 1617293024
Year 2016-12-01
Pages 375
Language en
Publisher Manning Publications

Types are often seen as a tool for checking errors, with the programmer writing a complete program first and using the type checker to detect errors. And while tests are used to show presence of errors, they can only find errors that you explicitly test for. In type-driven development, types become your tools for constructing programs and, used appropriately, can show the absence of errors. And you can express precise relationships between data, your assumptions are explicit and checkable, and you can precisely state and verify properties. Type-driven development lets users write extensible code, create simple specifications very early in development, and easily create mock implementation for testing. Type-Driven Development with Idris, written by the creator of Idris, teaches programmers how to improve the performance and accuracy of programs by taking advantage of a state-of-the-art type system. This book teaches readers using Idris, a language designed from the very beginning to support type-driven development. Readers learn how to manipulate types just like any other construct (numbers, strings, lists, etc.). This book teaches how to use type-driven development to build real-world software, as well as how to handle side-effects, state and concurrency, and interoperating with existing systems. By the end of this book, readers will be able to develop robust and verified software in Idris and apply type-driven development methods to programming in other languages. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.

Certified Programming with Dependent Types

Certified Programming with Dependent Types Author Adam Chlipala
ISBN-10 9780262317887
Year 2013-12-06
Pages 440
Language en
Publisher MIT Press

The technology of mechanized program verification can play a supporting role in many kinds of research projects in computer science, and related tools for formal proof-checking are seeing increasing adoption in mathematics and engineering. This book provides an introduction to the Coq software for writing and checking mathematical proofs. It takes a practical engineering focus throughout, emphasizing techniques that will help users to build, understand, and maintain large Coq developments and minimize the cost of code change over time. Two topics, rarely discussed elsewhere, are covered in detail: effective dependently typed programming (making productive use of a feature at the heart of the Coq system) and construction of domain-specific proof tactics. Almost every subject covered is also relevant to interactive computer theorem proving in general, not just program verification, demonstrated through examples of verified programs applied in many different sorts of formalizations. The book develops a unique automated proof style and applies it throughout; even experienced Coq users may benefit from reading about basic Coq concepts from this novel perspective. The book also offers a library of tactics, or programs that find proofs, designed for use with examples in the book. Readers will acquire the necessary skills to reimplement these tactics in other settings by the end of the book. All of the code appearing in the book is freely available online.

Verified Functional Programming in Agda

Verified Functional Programming in Agda Author Aaron Stump
ISBN-10 9781970001266
Year 2016-02-01
Pages 283
Language en
Publisher Morgan & Claypool

Agda is an advanced programming language based on Type Theory. Agda's type system is expressive enough to support full functional verification of programs, in two styles. In external verification, we write pure functional programs and then write proofs of properties about them. The proofs are separate external artifacts, typically using structural induction. In internal verification, we specify properties of programs through rich types for the programs themselves. This often necessitates including proofs inside code, to show the type checker that the specified properties hold. The power to prove properties of programs in these two styles is a profound addition to the practice of programming, giving programmers the power to guarantee the absence of bugs, and thus improve the quality of software more than previously possible. Verified Functional Programming in Agda is the first book to provide a systematic exposition of external and internal verification in Agda, suitable for undergraduate students of Computer Science. No familiarity with functional programming or computer-checked proofs is presupposed. The book begins with an introduction to functional programming through familiar examples like booleans, natural numbers, and lists, and techniques for external verification. Internal verification is considered through the examples of vectors, binary search trees, and Braun trees. More advanced material on type-level computation, explicit reasoning about termination, and normalization by evaluation is also included. The book also includes a medium-sized case study on Huffman encoding and decoding.

Haskell Design Patterns

Haskell Design Patterns Author Ryan Lemmer
ISBN-10 9781783988730
Year 2015-11-06
Pages 166
Language en
Publisher Packt Publishing Ltd

Take your Haskell and functional programming skills to the next level by exploring new idioms and design patterns About This Book Explore Haskell on a higher level through idioms and patterns Get an in-depth look into the three strongholds of Haskell: higher-order functions, the Type system, and Lazy evaluation Expand your understanding of Haskell and functional programming, one line of executable code at a time Who This Book Is For If you're a Haskell programmer with a firm grasp of the basics and ready to move more deeply into modern idiomatic Haskell programming, then this book is for you. What You Will Learn Understand the relationship between the “Gang of Four” OOP Design Patterns and Haskell Try out three ways of Streaming I/O: imperative, Lazy, and Iteratee based Explore the pervasive pattern of Composition: from function composition through to high-level composition with Lenses Synthesize Functor, Applicative, Arrow and Monad in a single conceptual framework Follow the grand arc of Fold and Map on lists all the way to their culmination in Lenses and Generic Programming Get a taste of Type-level programming in Haskell and how this relates to dependently-typed programming Retrace the evolution, one key language extension at a time, of the Haskell Type and Kind systems Place the elements of modern Haskell in a historical framework In Detail Design patterns and idioms can widen our perspective by showing us where to look, what to look at, and ultimately how to see what we are looking at. At their best, patterns are a shorthand method of communicating better ways to code (writing less, more maintainable, and more efficient code). This book starts with Haskell 98 and through the lens of patterns and idioms investigates the key advances and programming styles that together make "modern Haskell". Your journey begins with the three pillars of Haskell. Then you'll experience the problem with Lazy I/O, together with a solution. You'll also trace the hierarchy formed by Functor, Applicative, Arrow, and Monad. Next you'll explore how Fold and Map are generalized by Foldable and Traversable, which in turn is unified in a broader context by functional Lenses. You'll delve more deeply into the Type system, which will prepare you for an overview of Generic programming. In conclusion you go to the edge of Haskell by investigating the Kind system and how this relates to Dependently-typed programming. Style and approach Using short pieces of executable code, this guide gradually explores the broad pattern landscape of modern Haskell. Ideas are presented in their historical context and arrived at through intuitive derivations, always with a focus on the problems they solve.

The Formal Semantics of Programming Languages

The Formal Semantics of Programming Languages Author Glynn Winskel
ISBN-10 0262731037
Year 1993
Pages 361
Language en
Publisher MIT Press

The Formal Semantics of Programming Languages provides the basic mathematical techniques necessary for those who are beginning a study of the semantics and logics of programming languages. These techniques will allow students to invent, formalize, and justify rules with which to reason about a variety of programming languages. Although the treatment is elementary, several of the topics covered are drawn from recent research, including the vital area of concurency. The book contains many exercises ranging from simple to miniprojects.Starting with basic set theory, structural operational semantics is introduced as a way to define the meaning of programming languages along with associated proof techniques. Denotational and axiomatic semantics are illustrated on a simple language of while-programs, and fall proofs are given of the equivalence of the operational and denotational semantics and soundness and relative completeness of the axiomatic semantics. A proof of Godel's incompleteness theorem, which emphasizes the impossibility of achieving a fully complete axiomatic semantics, is included. It is supported by an appendix providing an introduction to the theory of computability based on while-programs.Following a presentation of domain theory, the semantics and methods of proof for several functional languages are treated. The simplest language is that of recursion equations with both call-by-value and call-by-name evaluation. This work is extended to lan guages with higher and recursive types, including a treatment of the eager and lazy lambda-calculi. Throughout, the relationship between denotational and operational semantics is stressed, and the proofs of the correspondence between the operation and denotational semantics are provided. The treatment of recursive types - one of the more advanced parts of the book - relies on the use of information systems to represent domains. The book concludes with a chapter on parallel programming languages, accompanied by a discussion of methods for specifying and verifying nondeterministic and parallel programs.

Type Theory and Formal Proof

Type Theory and Formal Proof Author Rob Nederpelt
ISBN-10 9781316061084
Year 2014-11-06
Language en
Publisher Cambridge University Press

Type theory is a fast-evolving field at the crossroads of logic, computer science and mathematics. This gentle step-by-step introduction is ideal for graduate students and researchers who need to understand the ins and outs of the mathematical machinery, the role of logical rules therein, the essential contribution of definitions and the decisive nature of well-structured proofs. The authors begin with untyped lambda calculus and proceed to several fundamental type systems, including the well-known and powerful Calculus of Constructions. The book also covers the essence of proof checking and proof development, and the use of dependent type theory to formalise mathematics. The only prerequisite is a basic knowledge of undergraduate mathematics. Carefully chosen examples illustrate the theory throughout. Each chapter ends with a summary of the content, some historical context, suggestions for further reading and a selection of exercises to help readers familiarise themselves with the material.

Parallel and Concurrent Programming in Haskell

Parallel and Concurrent Programming in Haskell Author Simon Marlow
ISBN-10 9781449335922
Year 2013-07-12
Pages 322
Language en
Publisher "O'Reilly Media, Inc."

If you have a working knowledge of Haskell, this hands-on book shows you how to use the language’s many APIs and frameworks for writing both parallel and concurrent programs. You’ll learn how parallelism exploits multicore processors to speed up computation-heavy programs, and how concurrency enables you to write programs with threads for multiple interactions. Author Simon Marlow walks you through the process with lots of code examples that you can run, experiment with, and extend. Divided into separate sections on Parallel and Concurrent Haskell, this book also includes exercises to help you become familiar with the concepts presented: Express parallelism in Haskell with the Eval monad and Evaluation Strategies Parallelize ordinary Haskell code with the Par monad Build parallel array-based computations, using the Repa library Use the Accelerate library to run computations directly on the GPU Work with basic interfaces for writing concurrent code Build trees of threads for larger and more complex programs Learn how to build high-speed concurrent network servers Write distributed programs that run on multiple machines in a network

Cocoa Design Patterns

Cocoa Design Patterns Author Erik Buck
ISBN-10 0321591208
Year 2009-09-01
Pages 456
Language en
Publisher Pearson Education

“Next time some kid shows up at my door asking for a code review, this is the book that I am going to throw at him.” –Aaron Hillegass, founder of Big Nerd Ranch, Inc., and author of Cocoa Programming for Mac OS X Unlocking the Secrets of Cocoa and Its Object-Oriented Frameworks Mac and iPhone developers are often overwhelmed by the breadth and sophistication of the Cocoa frameworks. Although Cocoa is indeed huge, once you understand the object-oriented patterns it uses, you’ll find it remarkably elegant, consistent, and simple. Cocoa Design Patterns begins with the mother of all patterns: the Model-View-Controller (MVC) pattern, which is central to all Mac and iPhone development. Encouraged, and in some cases enforced by Apple’s tools, it’s important to have a firm grasp of MVC right from the start. The book’s midsection is a catalog of the essential design patterns you’ll encounter in Cocoa, including Fundamental patterns, such as enumerators, accessors, and two-stage creation Patterns that empower, such as singleton, delegates, and the responder chain Patterns that hide complexity, including bundles, class clusters, proxies and forwarding, and controllers And that’s not all of them! Cocoa Design Patterns painstakingly isolates 28 design patterns, accompanied with real-world examples and sample code you can apply to your applications today. The book wraps up with coverage of Core Data models, AppKit views, and a chapter on Bindings and Controllers. Cocoa Design Patterns clearly defines the problems each pattern solves with a foundation in Objective-C and the Cocoa frameworks and can be used by any Mac or iPhone developer.

Nim in Action

Nim in Action Author Dominik Picheta
ISBN-10 1617293431
Year 2017-03
Pages 400
Language en
Publisher Manning Publications

Nim is a new general-purpose programming language that offers support for systems programming, object oriented programming, procedural programming, functional programming, and more. Nim combines the speed of C with the expressiveness of Python and the flexibility of Lisp and it compiles to C as well as C++, Objective C, and even JavaScript. Nim's features make it perfect for developing anything from web applications to operating systems. Nim in Action introduces the Nim programming language and teaches readers how to write native software applications and libraries, web applications, embedded device software, and programs that communicate over the internet. This book is full of hands-on examples that teach how to test, debug, document, and package Nim applications. It also reveals how to interface with foreign languages such as C and C++ and how to use metaprogramming features to write domain specific languages. This book demonstrates how to implement a fully-functioning chat server, a Twitter clone, and many other software projects. It provides readers with a solid knowledge of Nim and the ability to use it to write powerful, portable and efficient applications. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.

An Introduction to the Language of Category Theory

An Introduction to the Language of Category Theory Author Steven Roman
ISBN-10 9783319419176
Year 2017-02-20
Pages 169
Language en
Publisher Birkhäuser

This textbook provides an introduction to elementary category theory, with the aim of making what can be a confusing and sometimes overwhelming subject more accessible. In writing about this challenging subject, the author has brought to bear all of the experience he has gained in authoring over 30 books in university-level mathematics. The goal of this book is to present the five major ideas of category theory: categories, functors, natural transformations, universality, and adjoints in as friendly and relaxed a manner as possible while at the same time not sacrificing rigor. These topics are developed in a straightforward, step-by-step manner and are accompanied by numerous examples and exercises, most of which are drawn from abstract algebra. The first chapter of the book introduces the definitions of category and functor and discusses diagrams,duality, initial and terminal objects, special types of morphisms, and some special types of categories,particularly comma categories and hom-set categories. Chapter 2 is devoted to functors and naturaltransformations, concluding with Yoneda's lemma. Chapter 3 presents the concept of universality and Chapter 4 continues this discussion by exploring cones, limits, and the most common categorical constructions – products, equalizers, pullbacks and exponentials (along with their dual constructions). The chapter concludes with a theorem on the existence of limits. Finally, Chapter 5 covers adjoints and adjunctions. Graduate and advanced undergraduates students in mathematics, computer science, physics, or related fields who need to know or use category theory in their work will find An Introduction to Category Theory to be a concise and accessible resource. It will be particularly useful for those looking for a more elementary treatment of the topic before tackling more advanced texts.

Life of Pi

Life of Pi Author Yann Martel
ISBN-10 0307371123
Year 2009-03-19
Pages 368
Language en
Publisher Vintage Canada

Life of Pi is a masterful and utterly original novel that is at once the story of a young castaway who faces immeasurable hardships on the high seas, and a meditation on religion, faith, art and life that is as witty as it is profound. Using the threads of all of our best stories, Yann Martel has woven a glorious spiritual adventure that makes us question what it means to be alive, and to believe.

The Primrose Path

The Primrose Path Author Rebecca Griffiths
ISBN-10 9780751561951
Year 2016-03-24
Pages 384
Language en
Publisher Hachette UK

Haunted by her past. In danger from her present. Isolated, alone, vulnerable. Sometimes the danger is closer than you think. As a teenager, Sarah D'Villez famously escaped a man who abducted and held her hostage for eleven days. The case became notorious, with Sarah's face splashed across the front of every newspaper in the country. Now, seventeen years later, that man is about to be released from prison. Fearful of the media storm that is sure to follow, Sarah decides to flee to rural Wales under a new identity, telling nobody where she's gone. Settling into the small community she is now part of, Sarah soon realises that someone is watching her. Someone who seems to know everything about her . . .