[swift-evolution] [Proposal] Higher Kinded Types (Monads, Functors, etc.)

Andrey Tarantsov andrey at tarantsov.com
Thu Dec 17 05:11:45 CST 2015


A tentative -1, based on the following two personal opinions:

First, I consider myself a smart person with a very broad experience with non-functional languages, but reading this makes my mind hurt, a lot:

>    typeclass Functor f where
>        fmap :: (a -> b) -> f a -> f b
<snip>
> This makes it possible to build functions which operate not just on Maybe, but on any Functor.
> 
>    fstrlen :: Functor f => f String -> f Int
>    fstrlen fstr = fmap length faster
<snip>
>    protocol Functor {
>        typealias A
>        func fmap<FB where FB ~= Self>(f: A -> FB.A) -> FB
>    }

I understand what's going on here, but I never, ever want to see this code anywhere near (my) Swift.


Second, I consider this an anti-pattern:

> func sayHello(name: Optional<String>) -> Optional<String> {
> func sayHello(name: Array<String>) -> Array<String> {
> It doesn’t use the usual syntax sugar for Optionals and Array, to make it clear that the only difference between the 2 functions is the type signature. If were possible to express the concept of a Functor, we could write one function that would accept both Optionals and Arrays as parameters – and not just those 2, but any Functor (Result, Future, Signal…).

Optional.map and Array.map do different things, and unifying them seems harmful.


I'm yet to see a compelling case where monads are useful either, for a real job (and not as a workaround for the idiosyncrasies of the type system).


I believe the way to convince the rest of us (and I would love to be convinced) is to provide a few real, “end-user” app-level use cases and explain the benefit in plain language. In particular, I don't understand the example by Jens Persson, although it seems like a valuable one.

A.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151217/ccb3dc92/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: open.gif
Type: image/gif
Size: 43 bytes
Desc: not available
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151217/ccb3dc92/attachment.gif>


More information about the swift-evolution mailing list