Back

The Ultimate Functional Programming by Pragmatic Programmers

Books
17
Days Left
5
Get Bundle on Humble Bundle
Pragmatic Programmers
Save The Children
Cover of Domain Modeling Made Functional

Domain Modeling Made Functional

Scott Wlaschin

You want increased IPSer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you'll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely - often more so than an object-oriented approach. Practical examples in the open-source F# functional language, and examples from familiar business domains, show you how to apply these techniques to build software that is business-focused, flexible, and high quality. Domain-driven design is a well-established approach to designing software that ensures that domain experts and developers work together effectively to create high-quality software. This book is the first to combine DDD with techniques from statically typed functional programming. This book is perfect for newcomers to DDD or functional programming - all the techniques you need will be introduced and explained. Model a complex domain accurately using the F# type system, creating compilable code that is also readable documentation---ensuring that the code and design never get out of sync. Encode business rules in the design so that you have "compile-time unit tests," and eliminate many potential bugs by making illegal states unrepresentable. Assemble a series of small, testable functions into a complete use case, and compose these individual scenarios into a large-scale design. Discover why the combination of functional programming and DDD leads naturally to service-oriented and hexagonal architectures. Finally, create a functional domain model that works with traditional databases, NoSQL, and event stores, and safely expose your domain via a website or API. Solve real problems by focusing on real-world requirements for your software. What You Need: The code in this book is designed to be run interactively on Windows, Mac and Linux.You will need a recent version of F# (4.0 or greater), and the appropriate .NET runtime for your platform.Full installation instructions for all platforms at fsharp.org.

show more
Pragmatic
Cover of Programming Elm

Programming Elm

Jeremy Fairbank

Elm brings the safety and stability of functional programing to front-end development, making it one of the most popular new languages. Elm's functional nature and static typing means that run-time errors are nearly impossible, and it compiles to JavaScript for easy web deployment. This book helps you take advantage of this new language in your web site development. Learn how the Elm Architecture will help you create fast applications. Discover how to integrate Elm with JavaScript so you can update legacy applications. See how Elm tooling makes deployment quicker and easier. Functional programming offers safer applications with decreased runtime errors, but functional solutions that are type safe and easy to use have been hard to find, until the Elm language. Elm has the benefits of functional languages while compiling to JavaScript. This book provides a complete tutorial for the Elm language, starting with a simple static application that introduces Elm syntax, modules, and the virtual DOM, to exploring how to create a UI using functions. See how Elm handles the issues of state in functional languages. You'll continue to build up larger applications involving HTTP requests for communication. Integrate your Elm applications with JavaScript so you can update legacy applications or take advantage of JavaScript resources. Elm also provides built-in tooling to alleviate the tooling creep that's so common in JavaScript. This book covers Elm's deployment and testing tools that ease development confusion. Dive into advanced concepts including creating single-page applications, and creating performance improvements. Elm expert Jeremy Fairbank brings his years of web development experience to teaching how to use Elm for front-end development. Your web UIs will be faster, safer, and easier to develop with Elm and this tutorial. What You Need: You will need the latest version of Elm, 0.19, along with a browser to run the examples in this book.

show more
Pragmatic
Cover of Haskell Brain Teasers

Haskell Brain Teasers

Rebecca Skinner

Deepen your Haskell knowledge, sharpen your functional programming skills, and just have fun with 25 functional programming puzzles to tie your brain in knots. Challenge and exercise your functional programming knowledge by tackling these 25 fun, funky, and functional puzzles on Haskell programming topics like lazy evaluation, Haskell syntax, type classes, the type system, and popular libraries. Gain new insight into why Haskell is the way it is. Build mind-bending self-referential and circular data structures, unpick the seams of reality with unsafePerformIO, build enhanced DSLs with QualifiedDo, and roll back time with STM. Review or get introduced to Haskell's common quirks such as the unary minus and pattern guards while mastering newer language features up to GHC 9.12, including linear arrows and Or Patterns. Employ powerful techniques and recognize common pitfalls as you solve fiendish puzzles across five different topic areas. Don't sleep on the lazy evaluation puzzles: they'll challenge you to predict the behavior of programs that rely on laziness in unexpected ways. Think syntax and language extensions puzzles should be easy? Think again as you deal with the perversity of the unary minus operator, or puzzles based on new extensions like QualifiedDo. Prepare to be perplexed with Type Class puzzles on ad-hoc polymorphism, deriving strategies, and record fields. Want more? Try mixing classic ambiguous type puzzles with advanced new features like linear types. Want to read and debug more esoteric code and exotic language features? Then take on the Libraries puzzles, designed to challenge beginner and advanced readers as you peer into lenses, step into STM, and test the limits of your understanding with the singletons library. After trying your hand at each puzzle, read through the solution to get more insight into key Haskell features, and use the references to build a reading list to dive deeper into new areas of the language.

show more
Pragmatic
Cover of Advanced Functional Programming with Elixir

Advanced Functional Programming with Elixir

Joseph Koski

Use advanced functional programming principles, practical domain-driven design techniques, and production-ready Elixir code to build scalable, complex systems from simple, reusable components. Combine advanced functional programming concepts with production-ready Elixir and proven domain-driven design techniques to write cleaner, more thoughtful software. You'll explore foundational ideas like equality, ordering, predicates, monoids, and monads--then go beyond syntax as you develop intuition for composing logic, modeling behavior, and growing systems. With a focus on maintainable, declarative code over theory, you'll gain practical, composable patterns you can apply right away. Get ready to manage crowds, adjust priorities, and keep everyone safe in FunPark, a place that never sits still. Your job is to model that complexity and build the systems that keep everything running smoothly, even as the business team is still figuring out what they want and the experts keep rewriting the rules. Using core abstractions--equality, ordering, predicates, monoids, and monads--you'll break problems into small, composable pieces that are both well-behaved and easy to combine. Rather than getting bogged down in theory or formal proofs, you'll dive into real-world Elixir--using protocols, structs, and pattern matching to express shared behavior across your domain. Along the way, you'll build the vocabulary and mental models you need to organize complex logic, supported by a production-ready open-source library you can use, extend, and explore in your own projects. Whether you're an Elixir developer mastering functional programming or a functional programmer exploring Elixir, you'll discover how to write code that's easier to reason about--and create systems that stay understandable, even as they grow. What You Need: To follow along with the examples in this book, you'll need Elixir version > 1.16, access to the interactive shell (iex), and a code editor that supports Elixir syntax--such as Visual Studio Code, Neovim, or any editor you're comfortable with. You won't need Phoenix or any additional setup; the examples are minimal and self-contained, so you to focus on functional concepts without configuration overhead. If you're unsure how to install Elixir, see the official instructions at elixir-lang.org.

show more
Pragmatic

Learn Functional Programming with Elixir

Ulisses Almeida

Pragmatic
Cover of Effective Haskell

Effective Haskell

Rebecca Skinner

Put the power of Haskell to work in your programs, learning from an engineer who uses Haskell daily to get practical work done efficiently. Leverage powerful features like Monad Transformers and Type Families to build useful applications. Realize the benefits of a pure functional language, like protecting your code from side effects. Manage concurrent processes fearlessly. Apply functional techniques to working with databases and building RESTful services. Don't get bogged down in theory, but learn to employ advanced programming concepts to solve real-world problems. Don't just learn the syntax, but dive deeply into Haskell as you build efficient, well-tested programs. Haskell is a pure functional programming language with a rich ecosystem of tools and libraries. Designed to push the boundaries of programming, it offers unparalleled power for building reliable and maintainable systems. But to unleash that power, you need a guide. Effective Haskell is that guide. Written by an engineer who understands how to apply Haskell to the real world and uses it daily to get practical work done, it is your ticket to Haskell mastery. Gain deep understanding of how Haskell deals with IO and the outside world by writing a complete Haskell application that does several different kinds of IO. Reinforce your learnings with practice exercises in every chapter. Write stable and performant code using Haskell's type system, code that is easier to grow and refactor. Leverage the power of pure functional programming to improve collaboration, make concurrency safe and easy, and make large code bases manageable. Implement type-safe web services, write generative tests, design strongly typed embedded domain-specific languages, and build applications that exploit parallelism and concurrency without fear of deadlocks and race conditions. Create and deploy cloud-native Haskell applications. Master the performance characteristics of functional applications to make them run faster and use less memory. Write Haskell programs that solve real-world business problems. What You Need: Intel based Mac, M1 Macs, Linux PC, or Windows with WSL2 ghcup (http://www. Haskell.org/ghcup/) An active internet connection will be required for some projects.

show more
Pragmatic
Cover of Seven More Languages in Seven Weeks

Seven More Languages in Seven Weeks

Bruce Tate, Fred Daoud, Jack Moffitt, Erin Dees

Great programmers aren't born--they're made. The industry is moving from object-oriented languages to functional languages, and you need to commit to radical improvement. New programming languages arm you with the tools and idioms you need to refine your craft. While other language primers take you through basic installation and "Hello, World," we aim higher. Each language in Seven More Languages in Seven Weeks will take you on a step-by-step journey through the most important paradigms of our time. You'll learn seven exciting languages: Lua, Factor, Elixir, Elm, Julia, MiniKanren, and Idris. Learn from the award-winning programming series that inspired the Elixir language. Hear how other programmers across broadly different communities solve problems important enough to compel language development. Expand your perspective, and learn to solve multicore and distribution problems. In each language, you'll solve a non-trivial problem, using the techniques that make that language special. Write a fully functional game in Elm, without a single callback, that compiles to JavaScript so you can deploy it in any browser. Write a logic program in Clojure using a programming model, MiniKanren, that is as powerful as Prolog but much better at interacting with the outside world. Build a distributed program in Elixir with Lisp-style macros, rich Ruby-like syntax, and the richness of the Erlang virtual machine. Build your own object layer in Lua, a statistical program in Julia, a proof in code with Idris, and a quiz game in Factor. When you're done, you'll have written programs in five different programming paradigms that were written on three different continents. You'll have explored four languages on the leading edge, invented in the past five years, and three more radically different languages, each with something significant to teach you.

show more
Pragmatic
Cover of Getting Clojure

Getting Clojure

Russ Olsen

Behind every programming language lies a vision of how programs should be built. The vision behind Clojure is of a radically simple language framework holding together a sophisticated collection of programming features. Learning Clojure involves much more than just learning the mechanics of the language. To really get Clojure you need to understand the ideas underlying this structure of framework and features. You need this book: an accessible introduction to Clojure that focuses on the ideas behind the language as well as the practical details of writing code. Clojure attracts developers on the cutting edge and is arguably the best language for learning to program in the functional style without compromise. But this comes with a steep learning curve. Getting Clojure directly addresses this by teaching you how to think functionally as it teaches you the language. You'll learn about Clojure's powerful data structures and high-level functions, but you'll also learn what it means for a language to be functional, and how to think in Clojure's functional way. Each chapter of Getting Clojure takes a feature or two or three from the language, explains the syntax and the mechanics behind that feature so that you can make it work before digging into the deeper questions: What is the thinking behind the feature? And how does it fit in with the rest of the language? In Getting Clojure you'll learn Clojure's very simple syntax, but you'll also learn why that syntax is integral the way the language is constructed. You'll discover that most data structures in Clojure are immutable, but also why that leads to more reliable programs. And you'll see how easy it is to write Clojure functions and also how you can use those functions to build complex and capable systems. With real-world examples of how working Clojure programmers use the language, Getting Clojure will help you see the challenges of programming through the eye of experienced Clojure developers. What You Need: You will need to some background in programming. To follow along with the examples in the book, you will need Java 6 or new, Clojure 1.8 or 1.9, and Leiningen 2.

show more
Pragmatic

Functional Programming in Java

Venkat Subramaniam

Pragmatic
Cover of Web Development with Clojure

Web Development with Clojure

Dmitri Sotnikov and Scot Brown

Today, developers are increasingly adopting Clojure as a web-development platform. See for yourself what makes Clojure so desirable, as you create a series of web apps of growing complexity, exploring the full process of web development using a modern functional language. This fully updated third edition reveals the changes in the rapidly evolving Clojure ecosystem and provides a practical, complete walkthrough of the Clojure web-stack. Stop developing web apps with yesterday's tools. Today, developers are increasingly adopting Clojure as a web-development platform. See for yourself what makes Clojure so desirable, as you work hands-on with Clojure and build a series of web apps of increasing size and scope, culminating in a professional grade web app using all the techniques you've learned along the way. This fully updated third edition will get you up to speed on the changes in the rapidly evolving Clojure ecosystem - the many new libraries, tools, and best practices. Build a fully featured SPA app with re-frame, a popular front-end framework for ClojureScript supporting a functional style MVC approach for managing the UI state in Single-Page Application-style applications. Gain expertise in the powerful Ring stack using the Luminus framework. Learn how Clojure works with databases and speeds development of RESTful services. See why ClojureScript is rapidly becoming a popular front-end platform, and use ClojureScript with the popular re-frame library to build single-page applications. Whether you're already familiar with Clojure or completely new to the language, you'll be able to write web applications with Clojure at a professional level.

show more
Pragmatic

Clojure Applied

Ben Vandgrift and Alex Miller

Pragmatic
Cover of Mastering Clojure Macros

Mastering Clojure Macros

Colin Jones

Level up your skills by taking advantage of Clojure's powerful macro system. Macros make hard things possible and normal things easy. They can be tricky to use, and this book will help you deftly navigate the terrain. You'll discover how to write straightforward code that avoids duplication and clarifies your intentions. You'll learn how and why to write macros. You'll learn to recognize situations when using a macro would (and wouldn't!) be helpful. And you'll use macros to remove unnecessary code and build new language features. Clojure offers some sharp tools in its toolbox, and one of the sharpest is its macro system. This book will help you write macros using Clojure, and more importantly, recognize when you should be using macros in the first place. The Lisp "code-as-data" philosophy gives tremendous advantages to macro authors and users. You can use macros to evaluate code in other contexts, move computations to compile time, and create beautiful API layers. You don't need to wait on the Clojure language itself to add new features, you'll learn how to implement even the lowest-level features as macros. You'll step through representative samples of how to use macros in production libraries and applications, find clear details on how to construct macros, and learn pointers to avoid obstacles that often trip up macro amateurs. Clojure macros are more straightforward to use than metaprogramming features in many other languages, but they're different enough from normal programming to present challenges of their own. Mastering Clojure Macros examines some of these issues, along with alternatives to macros where they exist. By the time you finish this book, you'll be thinking like a macro professional. What You Need:The book examples have been developed under Clojure 1.6.0, although earlier and later versions of Clojure may work as well. You'll want to use Leiningen 2.x in order to follow along with the examples that use external projects.

show more
Pragmatic
Cover of Clojure Brain Teasers

Clojure Brain Teasers

Alex Miller and Lorilyn Jordan Miller

Challenge your knowledge of Clojure with 25 short Clojure teasers, sometimes with surprising results! Inspired by years of developer questions and feedback, these teasers are handpicked to clarify common points of confusion. Each code challenge illustrates Clojure's elegant design, explaining how and why it works. Enjoy these simple exercises solo or with friends to find gaps in your knowledge, challenge assumptions, and gain valuable insights. Tackle the most common points of confusion Clojure developers encounter, become more efficient when writing and debugging, and better predict the outcomes of Clojure code. Regardless of your Clojure experience, you're certain to learn something new. You know Clojure, but do you really understand it? You may know the mechanics and idioms, but what about the deeper, implicit concepts driving the design? Discover and explore the real Clojure, testing and supplementing your understanding of why this data-driven functional programming language works the way it does. You'll start with the basic concepts such as numeric types, numeric promotion, and logical truth. But the backbone of Clojure is its focus on immutable data, centered around the Clojure collections. Learn about collection equality, polymorphism on nil, adding and finding elements in different collection types, and sorted collections. Explore Clojure's evaluation model, including the Clojure reader, quoting, evaluation, and macro expansion. Finally, learn about the core library functions like `case`, `concat`, `for`, `partial`, and the details of type hinting, vars, and destructuring. Understand the peculiarities of these functions and how to apply them to your advantage in future programs. Use these new insights to build your own concise, expressive, and flexible code. Don't just use Clojure, master it. What You Need: Java 8 or higher Clojure 1.11 or higher

show more
Pragmatic
Cover of Programming Clojure

Programming Clojure

Alex Miller

Drowning in unnecessary complexity, unmanaged state, and tangles of spaghetti code? In the best tradition of Lisp, Clojure gets out of your way so you can focus on expressing simple solutions to hard problems. Clojure cuts through complexity by providing a set of composable tools--immutable data, functions, macros, and the interactive REPL. Written by members of the Clojure core team, this book is the essential, definitive guide to Clojure. This new edition includes information on all the newest features of Clojure, such as transducers and specs. Clojure joins the flexibility and agility of Lisp with the reach, stability, and performance of Java. Combine Clojure's tools for maximum effectiveness as you work with immutable data, functional programming, and safe concurrency to write programs that solve real-world problems. Start by reading and understanding Clojure syntax and see how Clojure is evaluated. From there, find out about the sequence abstraction, which combines immutable collections with functional programming to create truly reusable data transformation code. Clojure is a functional language; learn how to write programs in a functional style, and when and how to use recursion to your advantage. Discover Clojure's unique approach to state and identity, techniques for polymorphism and open systems using multimethods and protocols, and how to leverage Clojure's metaprogramming capabilities via macros. Finally, put all the pieces together in a real program. New to this edition is coverage of Clojure's spec library, one of the most interesting new features of Clojure for describing both data and functions. You can use Clojure spec to validate data, destructure data, explain invalid data, and generate large numbers of tests to verify the correctness of your code. With this book, you'll learn how to think in Clojure, and how to take advantage of its combined strengths to build powerful programs quickly. What You Need: Java 6 or higher Clojure 1.9

show more
Pragmatic
Cover of Functional Web Development with Elixir, OTP, and Phoenix

Functional Web Development with Elixir, OTP, and Phoenix

Lance Halvorsen

Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web applications. For decades OTP has helped developers create incredibly robust, scalable applications with unparalleled uptime. Make the most of them as you build a stateful web app with Elixir, OTP, and Phoenix. Model domain entities without an ORM or a database. Manage server state and keep your code clean with OTP Behaviours. Layer on a Phoenix web interface without coupling it to the business logic. Open doors to powerful new techniques that will get you thinking about web development in fundamentally new ways. Elixir and OTP provide exceptional tools to build rock-solid back-end applications that scale. In this book, you'll build a web application in a radically different way, with a back end that holds application state. You'll use persistent Phoenix Channel connections instead of HTTP's request-response, and create the full application in distinct, decoupled layers. In Part 1, start by building the business logic as a separate application, without Phoenix. Model the application domain with Elixir functions and simple data structures. By keeping state in memory instead of a database, you can reduce latency and simplify your code. In Part 2, add in the GenServer Behaviour to make managing in-memory state a breeze. Create a supervision tree to boost fault tolerance while separating error handling from business logic. Phoenix is a modern web framework you can layer on top of business logic while keeping the two completely decoupled. In Part 3, you'll do exactly that as you build a web interface with Phoenix. Bring in the application from Part 2 as a dependency to a new Phoenix project. Then use ultra-scalable Phoenix Channels to establish persistent connections between the stateful server and a stateful front-end client. You're going to love this way of building web apps! What You Need: You'll need a computer that can run Elixir version 1.5 or higher and Phoenix 1.3 or higher. Some familiarity with Elixir and Phoenix is recommended.

show more
Pragmatic
Cover of From Objects to Functions

From Objects to Functions

Uberto Barbini

Build applications quicker and with less effort using functional programming and Kotlin. Learn by building a complete application, from gathering requirements to delivering a microservice architecture following functional programming principles. Learn how to implement CQRS and EventSourcing in a functional way to map the domain into code better and to keep the cost of change low for the whole application life cycle. If you're curious about functional programming or you are struggling with how to put it into practice, this guide will help you increase your productivity composing small functions together instead of creating fat objects. Switching to the functional paradigm isn't easy when you're used to object-oriented programming. You need more than just lambdas and mapping over collections to get a declarative style and disentangle the state from the computations. Use transformations and compositions to help you write less code with better results. Boost your productivity and harness the power of functional programming by creating real-world applications rather than focusing on theoretical concepts. Work through a series of short exercises to find and compose pure functions, and create data structures that work like algebra. Get rid of mutable state in your software to eliminate the main source of bugs. Apply CQRS and EventSourcing patterns to translate stakeholder requirements into functional design and then into code. See how Kotlin's easy-to-learn syntax and functional-friendly approach make it a great option for a pragmatic language that integrates well with existing Java code and libraries. Leverage functional programming to build and deliver robust applications in less time and with fewer defects. What You Need: The code in this book is designed to allow you to build your application from scratch on Windows, Mac and Linux. You will need a recent IDE, we recommend IntelliJ Community Edition, and Kotlin 1.3.x or later.

show more
Pragmatic
Cover of Seven Obscure Languages in Seven Weeks

Seven Obscure Languages in Seven Weeks

Dmitry Zinoviev

Immerse yourself in the intricate world of forgotten programming languages with Seven Obscure Languages in Seven Weeks. This comprehensive guide serves as a bridge to understanding and revitalizing legacy code, offering invaluable insights into the evolution of programming. With hands-on tutorials spanning languages from Forth and Simula to SNOBOL and m4, readers are equipped to maintain older systems and gain a broader perspective on problem-solving techniques. Whether you are a seasoned developer, a software historian, or just curious about the roots of modern coding, this book illuminates the rich tapestry of programming's past and sheds light on its present and future. Venture into overlooked and long-forgotten programming languages that once stood at the forefront of technological innovation. From the stack-oriented design of Forth to the early object-oriented experiences in Simula, bridge the ever-widening chasm between contemporary code and legacy systems. If you find yourself ensnared by the challenges of updating or maintaining older systems, this book is the lifeline. Unravel the fabric of seven programming languages by following practical tutorials and building small applications. Find out how Simula led to C++, what made APL so powerful, and why we still use m4 even to this day. Along the way, you'll broaden your problem-solving horizons, and develop diverse approaches to computation that still ripple through today's coding landscape. By the final chapter, you won't merely possess historical knowledge, you'll be equipped with production ready skills capable of tackling projects that interface with legacy code. Trace the evolutionary lineage of programming to gain a predictive edge in anticipating future trends. After all, this isn't just a nostalgic trip - it's a roadmap to the past, present, and future of coding. What You Need: Various software tools and compilers are available for enthusiasts eager to explore the once-forgotten languages detailed in this book. Guidance is provided primarily for Linux users on accessing these older programming languages. This collection includes languages like m4, integral to the GNU Autoconf system, and other languages incorporated into the GNU ecosystem, such as APL, Forth, and Simula. For those with a penchant for nostalgia, there is the SNOBOL4.2, which can run using the DOSBox MS-DOS emulator. KRoC, an Occam compiler, works only with 32-bit architectures or in a docker. Suffolk University maintains Starset's modern implementation. Readers can find links to repositories of these development tools, ensuring they can fully immerse themselves in this intriguing journey.

show more
Pragmatic