Someone just told me that implementing an interface in F# is less vebose than in Ceylon. Let's see if that's true. Pick an example given on MSDN. (Yes, I know it's silly to make such trivial comparisons.)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"Encoding of natural numbers at | |
type level." | |
interface Nat of Zero|Succ<Nat> {} | |
"The natural number `0`." | |
interface Zero satisfies Nat {} | |
"The natural number `N+1` for a | |
given natural number `N`." | |
interface Succ<N> | |
satisfies Nat | |
given N satisfies Nat {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"Encoding of natural numbers at | |
type level." | |
interface Nat of Zero|Succ<Nat> {} | |
"The natural number `0`." | |
interface Zero satisfies Nat {} | |
"The natural number `N+1` for a | |
given natural number `N`." | |
interface Succ<N> | |
satisfies Nat | |
given N satisfies Nat {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//a function that produces a tuple | |
[String, String?, String] parseName(String name) { | |
value it = name.split().iterator(); | |
"first name is required" | |
assert (is String first = it.next()); | |
"last name is required" | |
assert (is String second = it.next()); | |
if (is String third = it.next()) { | |
return [first, second, third]; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Three generic functions for building tuple comparators. */ | |
"A comparator function for any `Comparable` type." | |
Comparison comparator<Type>(Type x, Type y) | |
given Type satisfies Comparable<Type> | |
=> x<=>y; | |
"A comparator function for instances of `[]`." | |
Comparison emptyComparator([] x, [] y) => equal; | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.concurrent { | |
Callable, | |
ScheduledThreadPoolExecutor | |
} | |
void execute(Integer numberOfTasks) { | |
value n = 1G; // same number of iterations as Java | |
value delta = 1.0 / n; | |
value startTime = process.nanoseconds; | |
value sliceSize = n / numberOfTasks; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
shared void run() => printAll { for (i in 0..50) fizzbuzz(i) }; | |
String fizzbuzz(Integer i) | |
=> (i%15==0 then "fizzbuzz") | |
else (i%3==0 then "fizz") | |
else (i%5==0 then "buzz") | |
else i.string; | |
void printAll({String*} strings) => print(", ".join(strings)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Gavins-New-MacBook-Pro:ceylon-dist gavin$ ant -Dbuild-against=last-release clean-ide eclipse | |
Buildfile: /Users/gavin/ceylon-dist/build.xml | |
clean-ide: | |
siblings: | |
clean: | |
clean-item: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"Finds the (last) longest substring that contains | |
at most two unique characters" | |
String longest2UniqueCharSubstring(String s) | |
=> let (init = [[0, 0, 0, 0], 0, '\0', '\0'], | |
mpos = s.fold(init)((acc,ch) | |
=> let ([[mb,me,cb,ce],cb1,ch0,ch1] = acc, | |
ce1 = ce+1, | |
max = (Integer b, Integer e) | |
=> me-mb > e-b then [mb,me,b,e] | |
else [b,e,b,e]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
shared String formatFloat( | |
"The floating point value to format." | |
Float float, | |
"The minimum number of allowed decimal places. | |
If `minDecimalPlaces<=0`, the result may have no | |
decimal point." | |
Integer minDecimalPlaces=1, | |
"The maximum number of allowed decimal places. | |